2013-02-28 3 views
3

Я не могу понять, почему это исключение выбросился ... У меня есть модульный тест:последовательность содержит более одного элемента, класс NancyBootstrapperBase

[Test] 
public void Should_return_status_ok_when_route_exists() 
{ 
    // Given 
    var bootstrapper = new DefaultNancyBootstrapper(); 
    var browser = new Browser(bootstrapper); 

    // When 
    var result = browser.Get("/", with => 
             { 
              with.HttpRequest(); 
             }); 
    // Then 
    Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); 

} 

Хотя переменная Браузеру назначения, исключение кинул в Нэнси Bootstrapper Базовый класс с последующей трассировки стека

System.InvalidOperationException: Последовательность содержит более одного элемента

at System.Linq.Enumerable.SingleOrDefault(IEnumerable`1 source) 
at Nancy.Bootstrapper.NancyBootstrapperBase`1.GetRootPathProvider() in NancyBootstrapperBase.cs: line 558 
at Nancy.Bootstrapper.NancyBootstrapperBase`1.get_RootPathProvider() in NancyBootstrapperBase.cs: line 172 
at Nancy.Bootstrapper.NancyBootstrapperBase`1.GetAdditionalInstances() in NancyBootstrapperBase.cs: line 514 
at Nancy.Bootstrapper.NancyBootstrapperBase`1.Initialise() in NancyBootstrapperBase.cs: line 242 
at Nancy.Testing.Browser..ctor(INancyBootstrapper bootstrapper) in Browser.cs: line 39 
at Tests.Tests.Should_return_status_ok_when_route_exists() in Tests.cs: line 34 
+0

Вы используете Nancy.Testing из того же проекта, в котором вы работаете? Если нет, то вы ссылаетесь на свою хостинговую сборку (Nancy.Hosting.xxxx) из проекта, которая также ссылается на Nancy.Testing? – TheCodeJunkie

+0

Я не запускал Nancy.Testing вообще. Должен ли я это сделать? Я только что добавил Nancy, Nancy.Authentication.Forms, Nancy.Testing ссылки на мой тестовый проект и запустить тесты, которые я написал с помощью Resharper в VS. Это неправильно? –

+0

Если вы указали только на Nancy, Nancy.Authentication.Forms и Nancy.Testing и получили эту проблему при запуске теста, тогда нам нужно будет узнать больше о вашей настройке проекта, чтобы узнать, почему это происходит. Доступен ли код в любом месте? – TheCodeJunkie

ответ

1

У меня была такая же проблема в последнее время. Я проверял мой загрузчик, пытаясь решить модуль Нэнси, как это:

[Test] 
public void PushModule_Is_Resolvable() 
{ 
    var pushModule = mUnderTest.GetModule(typeof (PushModule), new NancyContext()); 
    Assert.That(pushModule, Is.Not.Null); 
} 

Это дало исключение, описанное в этом вопросе. После прочтения ответа Криса я просто настроен, что DLL не могут быть скопированы в папку вывода в Visual Studio:

  • Найти ссылку Nancy.Hosting.Self в проекте, который тестируется.
  • Щелкните правой кнопкой мыши ссылку и выберите «Свойства».
  • Скопировать локальный в false.
  • Очистите и перестройте свое решение.

Это решило проблему для меня. Я бы разместил это как комментарий к ответу Криса, но так как это мой первый пост, я могу только публиковать ответы.

1

Я видел это с Nancy 0.16.1 на новой тестовой сборке, которая ссылается на Nancy, Nancy.Testing и ссылку на проект (в VS2010) на главную служебную сборку, которая содержит мои модули.

Служба сборки ссылается на Nancy.Hosting.Self.

Строка для тестовой сборки вытаскивает файл Nancy.Hosting.Self.dll в папку сборки, и тест завершается с ошибкой, которую вы описываете.

Извлечение библиотеки хостинга из папки сборки вручную устраняет ошибку, и тест проходит зеленый, например. delete MyTests\bin\Debug\Nancy.Hosting.Self.dll

1

Я испытал то же самое при тестировании с проектом, который относится к Nancy.Hosting.Self.

Моим обходным путем является создание CustomBootstrapper и переопределение свойства RootPathProvider.

class TestBootStrapper : DefaultNancyBootstrapper{ 
    protected override IRootPathProvider RootPathProvider { 
     get { 
      return new FakeRootPathProvider(); 
     } 
    } 
} 
Смежные вопросы