私は、SUTタイプ以外にも、いくつかの同様の見た目のテストクラスを持っているIEquatable<T>
を実装しているモデルの大きなコレクションを持っています。テストでは、インプリメンテーションとテスト中のモデルによって実装されているその他の共通の側面が検証されます。ジェネリックスなしのテストクラスの簡素化
抽象ジェネリックテストクラスを使用しても大したことはありませんが、演算子のコンパイル時のオーバーロード解決が緩和され、いずれの型に対しても派生テストクラスを実装する必要があります。
属性を使用すると、派生したテストクラスが不要になりますが、演算子のコンパイル時のオーバーロードの解決は残ります。
オペレータのコンパイル時のオーバーロード解決を維持し、テストメソッドを呼び出すためのオブジェクトの単一のコレクション(タイプであるかどうか)を持つ別のアプローチがありますか?以下の例で
、私はMemberData
を使用するが、彼らは(のみジェネリック型パラメータが使用されて)使用されないように==
と!=
オペレータとテストメソッドのシグネチャが最適未満で起動するためにリフレクションを使用しなければなりません。
[Theory]
[MemberData(nameof(GetModelTypes))]
public void MyTest<T>(T _)
where T : class, new()
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
// Add any known type customization's...
T t = fixture.Create<T>();
// Implement remaining generic test body.
}
public static IEnumerable<object[]> GetModelTypes() =>
{
new object[] {new ModelA()},
new object[] {new ModelB()},
/* ... */
}
オブジェクトのコレクションを1つ保守し、コンパイル時の過負荷解決でテストできる方法論を知っている人はいますか?
私は醜いテスト署名が好きではなかったので、それはそれを改善します。今私は 'op_Equality'と' op_Inequality'メンバーを取得するためにリフレクションを使用していますので、有効な結果を得ることができます。私は 'IdiomaticAsserts'を探しています。 – Ritmo2k
@ Ritmo2kええ、私はF#でテストを書いて、ジェネリック制約を使うことができると思います。 C#では、あなたは運がないと思います。 –