C# と Moq で単体テストを行う方法を学ぼうとしており、小さなテスト状況を構築しました。このコードを考えると:
public interface IUser
{
int CalculateAge();
DateTime DateOfBirth { get; set; }
string Name { get; set; }
}
public class User : IUser
{
public DateTime DateOfBirth { get; set; }
string Name { get; set; }
public int CalculateAge()
{
return DateTime.Now.Year - DateOfBirth.Year;
}
}
メソッドをテストしたいCalculateAge()
。DateOfBirth
これを行うには、テスト メソッドで次のようにして、プロパティに既定値を指定する必要があると考えました。
var userMock = new Mock<IUser>();
userMock.SetupProperty(u => u.DateOfBirth, new DateTime(1990, 3, 25)); //Is this supposed to give a default value for the property DateOfBirth ?
Assert.AreEqual(22, userMock.Object.CalculateAge());
しかし、アサーションになると、 の値CalculateAge()
は 0 に等しくなりますが、 はDateOfBirth
に等しくなりnew DateTime(1990, 3, 25)
ます。
これはばかげた例のように見えるかもしれませんが、何でも...モックを使用して、オブジェクト内のまだ開発されていないメソッド/プロパティに値を与えることができると思ったので、メソッドのテストは別のコンポーネントに依存しません私のクラスの、または私のオブジェクトのデフォルトのコンテキストを設定することさえあります(したがって、ここではユーザーの名前です...)私はこの問題に間違った方法で取り組んでいますか?
ありがとう。