0

外部 API とのコントラクトを検証する一連のテストがあります。テストクラスにコントラクトインターフェイスを実装して、変更された場合にテストクラス自体が新しいメソッドに対してテストが作成されるようにします。

だから何か

public interface IExternalThing {
  Dictionary<string, int> GetSomeValues(int id);
}

[TestFixture]
public class ContractVerification : IExternalThing {
  private realExternalThing = new ExternalThing();

  private static IEnumerable GetValuesSource {
    get
    {
      yield return new TestCaseData(0).Returns(
        new Dictionary<string, int> {
          {"thing", 1}
        }
      );
    }
  }

  [Test]
  [TestCaseSource("GetValuesSource")]
  public Dictionary<string, int> GetSomeValues(int id) {
      return realExternalThing.GetSomeValues(id);
  }
}

このアプローチはこれまでのところうまくいきましたが、このメソッドがディクショナリを返すため、NUnit は次のメッセージで失敗を報告しています。

> Expected and actual are both
> <System.Collections.Generic.Dictionary`2[System.String,System.Int32]>
> with 1 elements

これに別の方法でアプローチすることもできると思いますが、NUnit にIs.EquivalentTo単純な等価性の代わりにテストを依頼できれば、それは素晴らしいことです。

それは可能ですか?

4

1 に答える 1

0

http://www.nunit.org/index.php?p=collectionAssert&r=2.5 - CollectionAssert.AreEquivalent()

于 2013-09-11T12:28:43.643 に答える