複数の人が取り組んでいるプロジェクトがあります。プロジェクトの単体テストを作成しています。(これらは最初からあったはずですが、プロジェクトが開始された後に参加しました。)
多くのプロパティを持つ多くのモデルがあります。これらのモデルが正しくインスタンス化され、プロパティが設定されていることをテストする単体テストを作成するようアドバイスしていただけないでしょうか?
複数の人が取り組んでいるプロジェクトがあります。プロジェクトの単体テストを作成しています。(これらは最初からあったはずですが、プロジェクトが開始された後に参加しました。)
多くのプロパティを持つ多くのモデルがあります。これらのモデルが正しくインスタンス化され、プロパティが設定されていることをテストする単体テストを作成するようアドバイスしていただけないでしょうか?
それらが ORM フレームワークに対して正しくロードされるかどうかはテストしません。ただし、ロジックが含まれている場合はテストを追加します。たとえば、次のようになります。
private IList<User> _allUsers;
public IEnumerable<User> GetActiveUser
{
get { return _allUsers.Where(u => u.IsActive);
}
これには、アクティブなユーザーのみを取得していることを確認するためのテストが必要になる場合があります。
使用しているフレームワークやデータ アクセス レイヤー、およびモデル自体に組み込まれているビジネス ロジックによって、モデルが正しく保持されていることをテストします。
NUnit + Fluent Assertions を使用して、永続化アクション (モデルの作成と保存、すべての値が適切に取得されることの確認など) の前後でモデルを比較するのが好きです。
厳密に永続化する必要はないことに注意してください。おそらく、モデルはビュー モデルであり、マッパーによってビジネス エンティティからマップされます。私もそれをテストします。基本的に、モデルがレイヤーまたはロジックを正しく通過することをテストする必要があり、モデル自体をテストするのではありません (もちろん、モデルに組み込まれているビジネス ロジックは別として)。プロパティが機能することをテストする場合のように、言語またはフレームワークの機能/コンパイラが機能していることをテストすることは、時間の無駄に思えます。
大雑把な例:
// arrange
var expected = new PersonModel
{
FirstName = "John",
LastName = "Doe",
DateOfBirth = DateTime.Now
// etc
}
// act
var id = InsertModelAndReturnId(expected);
var actual = RetrieveModelById(id);
// assert
actual.ShouldHave().AllProperties().EqualTo(expected); // ShouldHave is from Fluent Assertions. This line makes sure expected and actual have the same values after being persisted and retrieved