> 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 tests (as well as any other kind of 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 tests for this behaviour obviously have to change as well. For example, different implementations of `ConsoleGreetingService.ShowGreeting` like Console.WriteLine("Hello!"); or const string greetings = "Hello!"; Console.WriteLine(greetings); or Console.WriteLine(GetHelloInCertainLanguage(new CultureInfo("en")) + "!"); can all be subject to the same, unchanged test 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 tests don't have to be changed. <sub>Side note: how to implement a 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>