我从 asp.net mvc 4 框架中的单元测试开始。
我有一个包含基本 crud 方法和 save 方法的存储库。当我创建一个单元测试时,我创建一个测试存储库并测试是否添加了一个项目到集合中。一切都很顺利,但我无法测试保存方法是否被击中。
我尝试向测试存储库添加一个布尔属性,如果 .save() 被命中,该属性将设置为 true。但随后我需要更改界面以及数据库存储库。在我看来,这既不实用也不是最佳实践。
测试这个的最佳方法是什么?预先感谢您的回答。
我的代码:
假存储库:
public class TestUserRepository : IUserManagementRepository
{
/// <summary>
/// entries used used for testing
/// </summary>
private List<User> _entities;
/// <summary>
/// constructor
/// </summary>
public TestUserRepository()
{
_entities = new List<User>();
_entities.Add(new User
{
Id = 1,
InsertDate = DateTime.Now,
LastUpdate = DateTime.Now,
Username = "TestUserName",
Password = "TestPassword"
});
}
...
public void Create(User task)
{
_entities.Add(task);
}
public void Save()
{
//do nothing
}
}
要测试的控制器:
[HttpPost]
public ActionResult Create(User user)
{
if (ModelState.IsValid)
{
_repository.Create(user);
_repository.Save();
return RedirectToAction("Index");
}
else
{
return View(user);
}
}
和测试
[TestMethod()]
public void CreateTest()
{
IUserManagementRepository repository = new TestUserRepository();
UserController controller = new UserController(repository);
User user = new User { Username = "UnitTestUserName", InsertDate = DateTime.Now, LastUpdate = DateTime.Now, Password = "Password" };
ActionResult actionResult = controller.Create(user);
User returnedUser = repository.FindBy(u => u.Username == "UnitTestUserName").First<User>();
Assert.IsNotNull(actionResult);
Assert.AreEqual(user, returnedUser);
}