我们使用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’和‘Nmok2.is’之间的一个模糊的引用(对于‘Has’也是一样的)。
有办法绕过这件事吗?这两种匹配程序似乎都有类似的功能。当然,用完整的命名空间对每个matcher类进行前缀是有效的,但是它使测试的可读性大大降低。
谷歌对这个问题的搜索发现根本不匹配,所以我的下腹感觉是我在做一些非常愚蠢的事情。
发布于 2011-03-21 11:04:32
您可以避免使用Nunit fluent语法。
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;现在您可以使用这两种fluent接口,但是代码会读取
Expect.Once.On(database).Method("Create").
With(Has.Property("id", WithValue.EqualTo("012345678901")));
Assert.That(someValue, Is.EqualTo(54321));发布于 2012-01-05 22:17:44
有趣的是,NUnit还公开了一个名为Iz的小类,您可以使用它来避免与NMock2的命名冲突。因此,例如:而不是:
Assert.That(someValue, Is.EqualTo(54321))你可以写
Assert.That(someValue, Iz.EqualTo(54321))也许不是最干净的,但它起作用;)
https://stackoverflow.com/questions/5376666
复制相似问题