使用Rhino Mocks在模型视图Presenter中使用TDD的好示例/参考

时间:2009-06-02 09:35:39

标签: tdd rhino-mocks mvp

欣赏任何有关使用Rhino Mocks使用TDD和Model-View-Presenter模式的有用信息的网站的好例子或引用。

我正在寻找的是关于以下几点

  • 要模拟的内容(查看和演示者)
  • 新的AAA语法
  • 如何模拟UI行为?例如如果在视图中输入“firstName”和“lastName”,则启用 “提交”按钮,否则禁用它。这只是一个简单的例子。
  • 最佳做法

非常感谢这方面的任何意见。

提前致谢。

2 个答案:

答案 0 :(得分:4)

由于你没有得到答案,我将尽我所能到目前为止学到的东西;

第一个问题;要模拟什么 - 通常你会模拟你没有测试的一切。因此,鉴于您正在测试ViewModel,您将模拟更改ViewModel的视图代码,以及填充/保留ViewModel的模拟模型代码。

第二个问题; AAA语法 - 通过向测试方法添加以下类型的注释,可以最轻松地保留AAA语法;

[Test]
public void whenUserFillsInFirstAndLastName_ThenUserCanSubmit()
{
    // Arrange - code used to set-up what you are testing.
    this.loadViewModelWithInitalContext(viewModel); // This is a helper that loads the viewmodel

    // Act - code to fullfil the 'when' part in the test.
    this.viewModel.FirstName = "test";
    this.viewModel.LastName = "me";

    // Assert - code to check state of object being tested. (here I am testing a property that I bind to the enabled state of a submit type button)
    Assert.IsTrue(this.viewModel.UserCanSubmit);
}

第三个问题,模拟UI行为 - 通常你把它放在测试的Act部分(用于测试ViewModel)。

最后一个问题,最佳实践,我的经验说;

  • 一次只断言一件事,那么你的测试会因一次失败而失败,而且你会在找出问题时节省大量的时间。你甚至可以在每个断言中使用一个测试方法,但是问一个关于如何做到这一点的新问题,因为它需要不同的AAA语法实现来使事情可以管理。
  • 使用依赖注入,因为它使代码更易于模拟。
  • 让您的测试尽可能轻量级 - 不要去快速测试数据库或磁盘,因此开发人员应尽可能频繁地执行测试。如果我需要5分钟才能完成测试,我会厌倦等待。如果我需要10秒钟,我愿意更频繁地这样做。
  • 最后 - 但最重要的是 - 确保您团队中的任何人在每次签到时执行所有单元测试。这将使您的测试保持最新,并使您的代码库更加稳定。使用像CruiseControl.net这样的contiues集成平台来构建一个单独的服务器 - 尽可能频繁。线索是,如果某人/某物破坏了构建,你想尽快知道。

我的推荐参考资料;使用“您最喜欢的搜索引擎”搜索您想要做的事情,或在此发布您的测试示例并获得评论 - 这将有助于您改善自己的工作。

答案 1 :(得分:1)

菲尔·哈克(Phil Haack)对此表现得非常好blog post。下载源代码并查看测试,他们的评论非常好。