0

假设您的控制器中有一个注册操作。

    [HttpPost]
    public ViewResult Register(string username, string email, string password, string repeatPassword)

该行动将:

  1. 检查和验证参数
  2. 通信并将新数据添加到存储库
  3. 返回一个视图。

肯定需要对 1 和 3 进行单元测试,但是 2 呢?有什么方法可以对 2 进行单元测试,而不必在存储库中实现 add 方法?

谢谢,

温迪

4

2 回答 2

2

您使用 Moq 对 #2 的测试将是:

[Test]
public void UserIsAddedToRepository()
{
    // arrange
    var username = "user1";
    var email = "email@address";
    var password = "password";
    var controller = new LoginController();
    var mockUserRepo = new Mock<IUserRepo>();
    mockUserRepo.Setup(m => m.AddNewUser(username, email, password));

    // act
    controller.Register(username, email, password, "");

    // assert
    mockUserRepo.Verify(m => m.AddNewUser(username, email, password));
}

Moq 的Verify将像 NUnit Assert一样运行,如果未调用预期的方法,则测试将失败。

于 2012-08-01T11:57:05.297 回答
1

In order to test number 2, you can use mocking. You can mock your repository and return valid result for the test.

You can do the mock manually (in several ways, for example pass a parameter to the action method with the relevant repository - real or mock; or instantiate the controller class with the relevant mock object etc.) or you can use a mocking library like Moq.

于 2012-08-01T09:25:14.677 回答