假设您的控制器中有注册操作。
[HttpPost]
public ViewResult Register(string username, string email, string password, string repeatPassword)
此操作将:
绝对需要单元测试1和3,但2怎么样? 有没有办法单元测试2而不必在存储库中实现add方法?
谢谢,
RWendi
答案 0 :(得分: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的验证的行为类似于NUnit Assert ,如果未调用预期的方法,将无法通过测试。
答案 1 :(得分:1)
为了测试2号,您可以使用模拟。您可以模拟存储库并返回测试的有效结果。
您可以手动执行模拟(以多种方式,例如将参数传递给具有相关存储库的操作方法 - 实际或模拟;或使用相关模拟对象实例化控制器类等)或者您可以使用像Moq这样的模拟库。