@Dany Marmur - the crux of the debate is that GUI testing is hard to maintain. If you do it badly, every time you make a slight change to your GUI, tons of test cases start failing for no reason. Also, GUI testing has all sorts of issues to do with knowing when the action is completed. i.e. if you click on a button, then check for a result, how long do you wait to check for the result. Often test code doing the GUI automation is in another thread, and its hard for that thread to know when the application is done what its supposed to do and then test. If you check some state too early, then the test will fail because the app is done. But then you try on your own computer, and the test passes perfectly, because the app was slightly faster on your computer compared to the testing farm. If you do GUI testing well, all these are less of an issue. Some people like the very localized testing of very specific issues that you can get from a very specific test case. With a GUI test, things can fail for all sorts of reasons, and its hard to track down. But that is also the benefit, you get failures in things you did not think of.