Apple не облегчает тестирование вашего кода, когда вы начинаете приближаться к классам фреймворка. Я нашел UIApplication особенно сложным из-за его одноэлементной природы и того факта, что среда создает экземпляр для вас во время установки. Решения таких проблем обычно зависят от того, как вы тестируете; Например, у вас есть действительный объект UIApplication в ваших тестах? Если вы используете OCUnit, то [UIApplication sharedApplication] может само вернуть nil, если вы не настроили свою цель тестирования для запуска в комплекте приложений (честно говоря, мне никогда не удавалось заставить это работать).
Один из вариантов - просто не проверять это. В большинстве случаев ваши взаимодействия с главным окном относительно просты, и тесты этого кода тестируют инфраструктуру UIKit так же, как и ваш собственный код. Это стилистическое решение, которое зависит от того, как вы структурировали свой код, насколько комфортно вы оставляете эту небольшую область непроверенной (или, что более уместно, не автоматизированной для тестирования) и насколько сложно будет писать тесты.
Если у вас есть код, относящийся к объекту UIWindow, который, по вашему мнению, вам необходимо протестировать, я бы посоветовал вам инкапсулировать функциональность таким образом, чтобы вы могли затем контролировать тестируемый объект. Вы можете сделать это, создав для своего приложения подкласс UIApplication, который возвращает объект UIWindow из пользовательского метода. Используйте этот метод в своем коде вместо непосредственного доступа к свойству окна и в своих тестах переопределите этот метод, чтобы возвращать все, что вам нравится.