Я думаю, что это довольно ясно.Проблема в том, что вам трудно разделить обязанности API.У вас есть два.Инициализация API и выполнение API.Написание ваших тестов с такой зависимостью может убить вас.
Поэтому я бы порекомендовал API создать объект инициализации, а затем различные объекты команд для выполнения API.Командные объекты будут в каком-то хранилище, или вы можете создать их на лету.
API будет использовать фиктивный объект инициализации и будут использовать фиктивные командные объекты.
Объект инициализации действительноне имеет никаких зависимостей, за исключением того, что вам нужно инициализировать.
Объектам Command потребуется поддельный объект инициализации.
[EDIT]
Есть два способа заставить другие тесты завершиться неудачей, если тест инициализации не пройден
Добавить частную переменную в тестовый пример.private isInitialized = false;
.Затем все остальные ваши тесты проверяют состояние этой переменной, если не true, а затем завершаются неудачей.
Расширьте свой контрольный пример с помощью класса API.Добавьте частную функцию, которая запрашивает состояние инициализации.
Очиститель двух - 2. Самая быстрая реализация - 1.
IMHO Это можетбыть запахом кода, когда вы должны соединить свои тесты таким образом.Если, как вы сказали, это интеграционные тесты.Почему у вас есть отдельный тест для инициализации.Интеграция больше похожа на выполнение некоторых действий против вашего API.Поэтому каждый интеграционный тест ДОЛЖЕН инициализировать API.
Возможно, вы захотите переосмыслить свой сценарий сбоя каскада.При завершении испытаний может быть слишком много шума.
[EDIT1a]
Единственный способ убедиться, что вы удовлетворяете вашим требованиям, - это продлить NUnit .В частности, обратите внимание на Конструкторы тестовых наборов и Декораторы тестов .
Ссылка датирована мартом 2008 года, так что, надеюсь, она не устарела.