asp.net mvc 4 フレームワークでの単体テストから始めています。
基本的な crud メソッドと save メソッドを含むリポジトリを取得しました。単体テストを作成するときは、テスト リポジトリを作成し、たとえばアイテムがコレクションに追加されるかどうかをテストします。それはすべてスムーズに進みますが、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);
}