试驾南希模块

时间:2011-09-09 17:32:16

标签: unit-testing nancy

好的 - 我喜欢NancyFx。使用这几行编写Web应用程序真是太棒了!

但是如何在单位级别上测试你的NancyModules?

请注意,我知道Nancy(Nancy.Testing on NuGet)提供的excellent testframework,它提供了测试整个(几乎)应用程序堆栈的绝佳方法。但现在我指的是用于以TDD方式充实我的NancyModule内容的单元级别测试。

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

例如,如何对这个简单的应用程序进行单元测试?

public class ResouceModule : NancyModule 
{
   private IProductRepository _productRepo;

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

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

2 个答案:

答案 0 :(得分:12)

您可以使用我们提供的测试工具对第一个开发人员进行测试:

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

好的,所以你不是只是测试模块,但是如果你看一下调用堆栈,那么在你开始路线之前或之后没有多少事情发生,所以它并不是那么大在我的书中处理:-)如果你确实想要完全隔离地测试模块,那么你可以自己构建它并相应地戳出各个路径(它们只是模块中的字典)。

答案 1 :(得分:4)

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