正しい軌道にいるようですが、どのようにテストを進めるのか説明しようとします。
実際のsystem under test(SUT)はAuthenticate
クラスです。あなたはそれについて多くのことを話していないので、私は次のことを仮定します:
ICustomerRepository
のインスタンスを使用して、ユーザー名(電子メール)とパスワードの組み合わせに基づいてユーザーの存在を判断します。
再作成でCustomer
のインスタンスが返され、ユーザー名とパスワードの組み合わせが指定されている場合、Login
メソッドはtrueを返します。リポジトリがnull
を返した場合、Login
メソッドはfalseを返します。
私はこれらの前提を以下に使用しますが、それらが正しくない場合は、シナリオに合うようにテストを変更することができます。
テスト1:ユーザー名/パスワードの組み合わせが正しい場合、Login
はtrueを返します
public void LoginWillReturnTrueForAValidUsernamePasswordCombination()
{
string email = "[email protected]";
string password = "test";
//Dummy customer
var customer = new Customer();
//Create mock
var mockRepos = new Moq.Mock<ICustomerRepository>();
mockRepos.Setup(x => x.GetCustomerByPasswordUsername(
It.Is<string>(s => s == email),
It.Is<string>(s => s == password))
.Returns(customer);
var auth = new Authenticate(mockRepos.Object);
//Act
var result = auth.Login(email, password);
//Assert
Assert.IsTrue(result);
}
It.Is
の使用に注意してください。基本的には、模擬テストは、テストで定義された電子メールとパスワードがGetCustomerByPasswordUsername
メソッドに渡されたときにのみダミーの顧客オブジェクトを返すように設定されています。
テスト2:ユーザー名/パスワードの組み合わせが間違っている場合は、Login
は
public void LoginWillReturnFalseForAnInvalidUsernamePasswordCombination() { string email = "[email protected]"; string password = "test"; //Create mock var mockRepos = new Moq.Mock<ICustomerRepository>(); mockRepos.Setup(x => x.GetCustomerByPasswordUsername( It.Is<string>(s => s == email), It.Is<string>(s => s == password)) .Returns<Customer>(null); var auth = new Authenticate(mockRepos.Object); //Act var result = auth.Login(email, password); //Assert Assert.IsFalse(result); }
falseを返します暗黙的に上記の試験によってテストが、あなたはさらに一歩進み、そのテストを書きたいこと
Login
メソッドが正しいパラメータをリポジトリに渡すことを保証します。セットアップされているメソッドが呼び出されていない場合は、正しく
public void LoginWillInvokeGetCustomerByPasswordUsernameCorrectly()
{
string email = "[email protected]";
string password = "test";
//Create mock
var mockRepos = new Moq.Mock<ICustomerRepository>();
mockRepos.Setup(x => x.GetCustomerByPasswordUsername(
It.Is<string>(s => s == email),
It.Is<string>(s => s == password))
.Returns<Customer>(null)
.Verifiable();
var auth = new Authenticate(mockRepos.Object);
//Act (ignore result. We are only testing correct invocation)
auth.Login(email, password);
//Assert
mockRepos.Verify();
}
モックのVerify
メソッドは例外をスローログインが呼び出すリポジトリ:
テスト3:このようなテストは、次のようになります。 。
こちらがお役に立てば幸いです。あなたにさらなる質問があるかどうか尋ねるのをためらってください。
こんにちはクラウス。この情報は素晴らしいです。どのような完全に包括的な答え。どうもありがとう! – hoakey