1

単体テストとモックには NUnit (2.5.9) と NMock2 を使用しています。ただし、どちらにも密接に対応するマッチャー構文があります。私がする時

using NUnit.Framework;
using NMock2;

その後、次の NMock2 コードで:

Expect.Once.On(database).Method("Create").
  With(Has.Property("id", Is.EqualTo("012345678901")));

また、NUnit アサーション:

Assert.That(someValue, Is.EqualTo(54321));

次に、VS (2008) は、'Is' が 'NUnit.Framework.Is' と 'NMock2.Is' の間のあいまいな参照であると文句を言います('Has' についても同じです)。

これを回避する方法はありますか?いずれにせよ、どちらのマッチャーも同様の機能を持っているようです。もちろん、各マッチャー クラスの前に完全な名前空間を付けることは機能しますが、テストが大幅に読みにくくなります。

この問題について Google で検索してもまったく一致するものは見つからなかったので、私は非常にばかげたことをしているような気がします。

4

3 に答える 3

3

興味深いことに、NUnitは、このNMock2との名前の衝突を回避するために使用できるIzと呼ばれる小さなクラスも公開しています。たとえば、次の代わりに:

Assert.That(someValue, Is.EqualTo(54321))

あなたは書ける

Assert.That(someValue, Iz.EqualTo(54321))

最もきれいではないかもしれませんが、それはうまくいきます;)

于 2012-01-05T22:17:44.117 に答える
3

Nunit 流暢な構文の使用を避けることができます。

Assert.AreEqual(54321, someValue);

そして、エイリアスを組み合わせて使用​​します。

using NMock2;
using Is = NMock2.Is;
using Has = NMock2.Has;

これにより、アプリケーションはこれらのクラスの NMock バージョンを使用するようになります。NUnit のものにアクセスしたい場合は、名前空間を含む完全な名前を指定する必要があります。

両方を保持する別のオプションは、次の名前空間宣言とエイリアスを使用することです。

using NUnit.Framework;
using Is = NUnit.Framework.Is;
using NMock2;
using WithValue = NMock2.Is;
using Has = NMock2.Has;

これで、両方の流暢なインターフェースを使用できますが、コードは読み取ります

Expect.Once.On(database).Method("Create").
  With(Has.Property("id", WithValue.EqualTo("012345678901")));

Assert.That(someValue, Is.EqualTo(54321));
于 2011-03-21T11:04:32.937 に答える
1

制約を使用する必要がある場合は、ネームスペース エイリアスを使用します。例えば。

    N = NUnit.Framework を使用します。
    M = NMock2 を使用します。

それで

Assert.That(someValue, Is.EqualTo(54321))
になるだろう
Assert.That(someValue, N.Is.EqualTo(54321))

于 2011-03-21T11:03:32.617 に答える