неоднозначные ссылки при смешивании совпадений NUnit и NMock2 - PullRequest
1 голос
/ 21 марта 2011

Мы используем 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').

Есть ли способ обойти это? Кажется, что оба сопоставителя имеют схожую функциональность в любом случае. Конечно, префикс каждого класса matcher с полным пространством имен работает, но это делает тесты значительно менее читабельными.

Поиски в Google по этой проблеме вообще не нашли совпадений, так что я чувствую себя неуверенно, что я делаю что-то очень глупое.

Ответы [ 3 ]

3 голосов
/ 21 марта 2011

Вы можете не использовать свободный синтаксис 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));
3 голосов
/ 06 января 2012

Интересно, что NUnit также предоставляет небольшой класс Iz, который вы можете использовать, чтобы избежать конфликта имен с NMock2.Так, например, вместо:

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

вы можете написать

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

Может быть не самым чистым, но это работает;)

1 голос
/ 21 марта 2011

Используйте псевдонимы пространства имен, если вам нужно использовать ограничения.Например,

    using N = NUnit.Framework;
    using M = NMock2;

Тогда

Assert.That(someValue, Is.EqualTo(54321))
станет
Assert.That(someValue, N.Is.EqualTo(54321))
...