试驾 Nancy 模块

发布于 2024-12-03 16:41:38 字数 807 浏览 0 评论 0原文

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

但是如何在单元级别上测试驱动 NancyModule?

请注意,我知道 Nancy 提供的优秀的测试框架(Nancy在 NuGet 上进行测试),它提供了测试整个(几乎)应用程序堆栈的绝佳方法。但现在我指的是我用来以 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()];
        };
   }
}

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

Ok - I love NancyFx. Writing a web application with that few lines is just amazing!

But how do you test drive your NancyModules on the unit level?

Please note that I am aware of the excellent testframework supplied with Nancy (Nancy.Testing on NuGet), which gives excellent ways to test the whole (almost) application stack. But now I mean the unit level test I use to flesh out the contents of my NancyModule, in TDD fashion.

Since the routes are defined in the constructor, often together with a lamda expression that constitute the whole action, it feels a bit "unreachable" from a unit test. But have I missed something obvious on how to test the actions of the route?

For example, how would a unit test for this simple application look?

public class ResouceModule : NancyModule 
{
   private IProductRepository _productRepo;

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

See there - now I wrote the production code before the test... :) Any suggestions on how to start with the test?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

幸福丶如此 2024-12-10 16:41:38

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

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

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

You can do test first dev with the testing tools we provide:

  • In your test startup configure a bootstrapper that only contains the module you have under test and any any fake objects you want.
  • In your test execute a specific route (like GET /list) - you might want a small helper for this to remove some repeated code perhaps.
  • Assert on what comes back - you have full access to the request and response objects (for headers, cookies etc), along with helpers for HTML bodies and, coming in 1.8, helpers for handing JSON, XML and just string responses in the body.
  • Move onto the next route, rinse and repeat.

Ok, so you're not just testing the module, but if you look at the call stack, there's not much going on before or after you hit your route so it's not that big of a deal in my book :-) If you really do want to test the module in complete isolation then you can just construct it yourself and poke the individual routes accordingly (they're just dictionaries in the module).

北音执念 2024-12-10 16:41:38

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

As part of Nancy.Testing you can use the configurable bootsrapper to control the setup, including the IoC setup. That should enable testing the module without lower level dependencies, and enable TDD.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文