12

好的 - 我喜欢 NancyFx。用那几行代码编写一个 Web 应用程序真是太棒了!

但是您如何在单元级别上测试您的 NancyModules?

请注意,我知道 Nancy 提供了出色的测试框架(Nancy.Testing on NuGet),它提供了测试整个(几乎)应用程序堆栈的极好方法。但现在我的意思是我用来充实我的 NancyModule 内容的单元级测试,以 TDD 方式。

由于路由是在构造函数中定义的,通常与构成整个动作的 lamda 表达式一起定义,因此从单元测试中感觉有点“无法访问”。但是我是否错过了一些关于如何测试路线动作的明显内容?

例如,这个简单应用程序的单元测试看起来如何?

public class ResouceModule : NancyModule 
{
   private IProductRepository _productRepo;

   public ResourceModule(IProductRepository repo) : base("/products") 
   {
        Get["/list"] = parameters => { 
           return View["productList.cshtml", repo.GetAllProducts()];
        };
   }
}

看到那里 - 现在我在测试之前编写了生产代码...... :) 关于如何开始测试有什么建议吗?

4

2 回答 2

12

您可以使用我们提供的测试工具进行测试优先开发:

  • 在您的测试启动中配置一个引导程序,该引导程序仅包含您正在测试的模块和您想要的任何假对象。
  • 在你的测试中执行一个特定的路由(比如 GET /list)——你可能需要一个小助手来删除一些重复的代码。
  • 断言返回的内容 - 您可以完全访问请求和响应对象(用于标头、cookie 等),以及 HTML 正文的帮助程序,以及在 1.8 中用于处理 JSON、XML 和正文中的字符串响应的帮助程序。
  • 移动到下一条路线,冲洗并重复。

好的,所以你不仅仅是在测试模块,而且如果你查看调用堆栈,在你到达你的路线之前或之后没有太多事情发生,所以在我的书中这没什么大不了的 :-) 如果你真的确实想完全隔离地测试模块,那么您可以自己构建它并相应地戳各个路由(它们只是模块中的字典)。

于 2011-09-09T18:01:07.670 回答
4

作为 Nancy.Testing 的一部分,您可以使用可配置的引导程序来控制设置,包括 IoC 设置。这应该能够在没有较低级别依赖关系的情况下测试模块,并启用 TDD。

于 2011-09-09T17:50:39.880 回答