> I have read that the changes to the code base should not change the unit tests. Let me say this straight: **this makes no sense**. I don't have that book at hand, and you did not tell us which section lead you to this interpretation, still I am convinced you must have misread something. Unit test will not be required to change when an implementation of a certain (externally visible) behaviour changes, **as long as the behaviour itself stays the same**. But when the implementation changes up to the point where the behaviour changes, then the unit tests for this behaviour obviously have to change as well. For example, whether the `ConsoleGreetingService.ShowGreeting` is implemented like Console.WriteLine("Hello!"); or const string greetings = "Hello!"; Console.WriteLine(greetings); or Console.WriteLine(GetHelloInCertainLanguage(new CultureInfo("en")) + "!"); should not require any change to a unit tests which verifies the expected string is printed to the console. Replacing a console output by some GUI output, however, is a change which obviously changes the externally visible behaviour, hence there is no reason to assume unit tests don't have to be changed. <sub>Side note: how to implement a unit test which verifies that a certain message box with a certain text will be shown, and if it is justified call such a test a "unit test" is a separate topic which I don't discuss here.</sub>