2013-03-06 4 views
1

Невозможно найти причину, по которой тест не работает. Кто-нибудь знал, почему это происходит? Разница между этими двумя тестами является оной в представлениях. Сначала это страница «.html», а во втором - «.liquid». В моем проекте я использую «.liquid», поэтому «.html» предназначен только для тестирования правильного рабочего теста. У меня есть Nancy модульИспытание модуля модуля Нэнси. Исключение в модульном тесте

public sealed class Module : NancyModule 
{ 
    public Module(IBackend storage) 
    { 
     Get["/"] = _ => View["Create.liquid"];  
     Get["/Test"] = _ => View["TestHtml.html"]; 
    } 
} 

И тесты

[Test] 
public void test_html() 
{ 
    // Given 
    var bootstrapper = new ConfigurableBootstrapper(with => 
    { 
     var module = new Module(new Endpoint()); 
     with.Module(module); 
    }); 
    browser = new Browser(bootstrapper); 

    // When 
    var result = browser.Get("/Test", with => 
    { 
     with.HttpRequest(); 
    }); 

    // Then 
    Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); 
} 

[Test] 
public void test_liquid() 
{ 
    // Given 
    var bootstrapper = new ConfigurableBootstrapper(with => 
    { 
     var module = new Module(new Endpoint()); 
     with.Module(module); 
    }); 
    browser = new Browser(bootstrapper); 

    // When 
    var result = browser.Get("/", with => 
    { 
     with.HttpRequest(); 
    }); 

    // Then 
    Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); 
} 

Существует исключение на втором тесте

System.Exception : ConfigurableBootstrapper Exception 
----> Nancy.RequestExecutionException : Oh noes! 
----> Nancy.ViewEngines.ViewNotFoundException : Unable to locate view 'Create.liquid' 
Currently available view engine extensions: sshtml,html,htm 
Locations inspected: ,,,,,,,,views/Module/Create.liquid-en- US,views/Module/Create.liquid,Module/Create.liquid-en-US,Module/Create.liquid,views/Create.liquid-en-US,views/Create.liquid,Create.liquid-en-US,Create.liquid 
Root path: D:\Projects\epm-vsp-pasta\Tests\bin\Debug 

С трассировку стека

at Nancy.Testing.PassThroughStatusCodeHandler.Handle(HttpStatusCode statusCode, NancyContext context) in d:\Nancy-master\src\Nancy.Testing\PassThroughStatusHandler.cs: line 22 
at Nancy.NancyEngine.CheckStatusCodeHandler(NancyContext context) in d:\Nancy-master\src\Nancy\NancyEngine.cs: line 219 
at Nancy.NancyEngine.HandleRequest(Request request, Func`2 preRequest) in d:\Nancy-master\src\Nancy\NancyEngine.cs: line 112 
at Nancy.NancyEngine.HandleRequest(Request request) in d:\Nancy-master\src\Nancy\NancyEngine.cs: line 77 
at Nancy.Testing.Browser.HandleRequest(String method, String path, Action`1 browserContext) in d:\Nancy-master\src\Nancy.Testing\Browser.cs: line 125 
at Nancy.Testing.Browser.Get(String path, Action`1 browserContext) in d:\Nancy-master\src\Nancy.Testing\Browser.cs: line 62 
at Tests.TestModule.test_liquid() in TestModule.cs: line 111 --RequestExecutionException 
at Nancy.NancyEngine.InvokeOnErrorHook(NancyContext context, ErrorPipeline pipeline, Exception ex) in d:\Nancy-master\src\Nancy\NancyEngine.cs: line 272 
--ViewNotFoundException  

ответ

2

Это должен сделать с .NET asse mbly loading. Поскольку никакие типы в сборке Nancy.ViewEngines.Dotliquid напрямую не используются, компилятор .NET считает, что он может быть умным и не включать ссылку в метаданные сборки. Это приводит к тому, что сборка не загружается в область приложения вообще, во время выполнения.

Причина, по которой он работает .html-файлы, заключается в том, что SuperSimpleViewEngine, который управляет расширениями .html, встроен в файл Nancy.dll и загружается.

Вы можете обойти это, явно используя тип сборки, например, помещая что-то вроде var foo = typeof(DotLiquidViewEngine) в свой тестовый код, используя свойство ViewEngine<DotLiquidViewEngine>() на настраиваемой настройке начальной загрузки.

Для нашей следующей версии, 0.17, мы добавили код, чтобы максимально уменьшить этот эффект, сканируя сборки в папке «bin» и явно загружая все, что ссылается на сборку Nancy *.

Надеется, что это помогает

+0

Я делаю то, что вы мне посоветовали, но теперь все мои тесты не удались с этим исключением System.TypeLoadException: Не удалось загрузить тип Nancy.IStaticContentProvider из сборки 'Nancy, Version = 0.16.1.0, Culture = neutral, PublicKeyToken = null ». –

+0

Трудно сказать, не взглянув на код =/ – TheCodeJunkie

1

Похожи, вы не ссылаться на жидкий виде двигателя из тестового проекта:

В настоящее время доступны расширения вида двигателя: sshtml, HTML, HTM

+0

Но моя тестовая html-страница находится в той же папке, что и все виды жидкости. И я получаю это из своего теста без каких-либо проблем ... Или я тебя не понял? –

+0

Ты меня не понял. Вам нужно добавить ссылку на жидкую сборку или добавить к ней нугмент в свой тестовый проект. –

+0

Как в 1 ответ? Я добавил, что DotLiquid и Nancy.ViewEngines.DotLiquid собираются в мой тестовый проект и делают то, что он говорит в первом ответе, но, к сожалению, все тесты не удались с этим исключением. –

0

Я видел это, если страница не копируется в выходной каталог.

Проверьте свойства для .liquid-файла в Visual Studio и убедитесь, что он имеет тот же параметр «Копировать в выходной каталог», что и рабочий файл .html.

Смежные вопросы