Я пытаюсь понять, почему наши интеграционные тесты не являются независимыми.Nancy OWIN тестовое взаимодействие
Существенная часть каждого теста:
var builder = new ContainerBuilder();
// IoC registrations, typically SingleInstance lifetimes or RegisterInstance
var browser = new Browser(new CustomBootstrapper(builder));
// browser.Post...
// Assertions
Каждый тест использует свежие ContainerBuilder и браузера экземпляров.
Один из наших тестов проходит при запуске независимо, но не работает, если выполняется вместе с другим аналогичным тестом. Это происходит в двух разных тестовых роликах (TestDriven.Net и JetBrains).
Прибор, я могу проверить, проверив HashCodes, что объект, используемый первым тестом и инъецируемый контейнером IoC, появляется во втором тесте (и не соответствует созданному там объекту). Методы вызываются на неправильный объект, поэтому тест не выполняется.
Код не использует статические элементы.
Я что-то не понимаю о том, как работает Нэнси, Нэнси. Испытание или OWIN? Как эти испытания могут влиять друг на друга?
По желанию, более подробная информация:
[Test]
public void Test1()
{
var organizationCache = new OrganizationCache();
// Logs Creating OrganizationCache with HashCode:43641814 (varies by run)
organizationCache.AddOrganization(organization);
ContainerBuilder builder = AutofacTestContainerBuilderFactory.CreateTestContainerBuilder();
builder.RegisterInstance(organizationCache);
var browser = new Browser(new CustomBootstrapper(builder));
BrowserResponse browserResponse = browser.Post(
"/api/...",
with => with.JsonBody(model));
browserResponse.StatusCode.ShouldBe(HttpStatusCode.OK);
}
В отдельный класс TestFixture, без каких-либо установки/демонтажа на любой:
[Test]
public void Test2()
{
var organizationCache = new OrganizationCache();
// Logs Creating OrganizationCache with HashCode:5337202 (varies by run)
organizationCache.AddOrganization(organization);
ContainerBuilder builder = AutofacTestContainerBuilderFactory.CreateTestContainerBuilder();
builder.RegisterInstance(organizationCache);
var browser = new Browser(new CustomBootstrapper(builder));
TestHelpers.Authenticate(browser); // log in (does a browser.Post)
BrowserResponse browserResponse = browser.Post(
"/api/...",
with => with.JsonBody(model));
browserResponse.StatusCode.ShouldBe(HttpStatusCode.Created);
// Passes if run independently, fails if run with other test
// When run with other test, system under test logs both OrganizationCache HashCodes during this test
}
Может CookieBasedSessions каким-то образом влияет на это? (Примечание: Я попытался удалить CookieBasedSessions.Enable
и- отдельно и вместе- создания в трубопроводе нового Session
, это не влияет на этот вопрос.)
Утилизация customBootstrapper после каждого теста не имеет никакого значения либо.
(CustomBootstrapper
не имеет статических полей и спускается с AutofacNancyBootstrapper
. Это слишком долго, чтобы разместить сообщение.)
Вы используете [TearDown] (http://nunit.org/index.php?p=teardown&r=2.6.4) для очистки этих тестов и настройки для их инициализации или это сидение в методе? – lloyd
Не могли бы вы показать еще какой-нибудь код? То есть, что-то неудобно, что ломается, и unittest, который заставляет другого сломаться, когда бегают togheter? Также используйте методы настройки и удаления, если вы используете это. – andreasnico
Что @andreasnico говорит – Jon