Ваш подход кажется хорошо для меня.
Вообще говоря, я не думаю, что есть что-то вроде «стандартного способа» для выборочного выполнения модульных тестов на основе версии iOS.
С одной стороны, ваш подход является тем же самым, что можно использовать для реализации одной функции выборочно или по-разному в соответствии с версией iOS. Возможно, вы уже знаете об этом обсуждении на CocoaWithLove: Tips and Tricks from conditional.... Это довольно старый, но описанные здесь подходы сохраняются.
Вы не укажете, как выполняются ваши модульные тесты, но реальный классный способ справиться с этим, IMO, заключался бы в том, чтобы указать, какие тесты выполнять за пределами реализации, чтобы вы указали, какие из них только для iOS7 и не загрязнять вашу тестовую реализацию.
Это может быть сделано, например, через номер версии, связанный с каждым тестом; перед вызовом реализации модульного теста вы проверяете номер версии в вызове функции, например, testSomethingThatOnlyWorksOniOS7
.
EDIT:
На самом деле, все было бы проще, что я думал, что в первую очередь. Теперь я немного взломал ...
Вы можете изменить место в OCUnit, где выполняется фактический вызов метода (не знаю, извините, но я не думаю, что это должно быть трудно найти. ..), так что он проверяет имя селектора: вы конвертируете имя селектора в строку (NSStringFromSelector
), и если оно соответствует некоторому регулярному выражению, вы берете какую-то конкретную ветвь (которая просто была бы в вашем случае, игнорируя этот тест).
Если вы обеспокоены изменением OCUnit, что может быть неразумно, то, что я сказал выше, можно было бы сделать с помощью метода swizzling: только если имя селектора не соответствует вашему выражению, вы вызываете оригинальную реализацию, иначе ничего не делаете.
", чтобы указать, какие из них предназначены только для iOS7 и не загрязняют вашу тестовую реализацию." Да, я надеялся найти какую-то непонятную функцию OCUnit, которая позволила мне это сделать. :) – hpique
Я не знаю ни одного ... но я только что добавил некоторые идеи к моему ответу ... не выглядит так сложно сделать ... – sergio
Возможно, переопределение «defaultTestSuite» может работать. Стоит проверить. – hpique