我想多次模拟同一个界面。下面的代码演示了我认为阻止我的行为。
我已阅读并无法找到解决方法。似乎没有办法区分_mockOne和_mockTwo。
public interface IDoSomething
{
}
[TestFixture]
class RhinoTest
{
private IDoSomething _mockOne;
private IDoSomething _mockTwo;
[SetUp]
public void SetUp()
{
_mockOne = MockRepository.GenerateMock<IDoSomething>();
_mockTwo = MockRepository.GenerateMock<IDoSomething>();
var somethings = new Dictionary<string, IDoSomething>
{
{"one", _mockOne},
{"two", _mockTwo}
};
//Pass this dictionary to a constructor for use in tests
}
}
如果我调试代码,我发现这两个对象具有相同的标识符。
我意识到这可能更多地与糟糕的抽象有关,但如果有解决方法的话,它对我们项目的当前位置非常有帮助。
非常感谢提前。
答案 0 :(得分:0)
原来我被应用程序复杂性抛弃了。
我实际上是一个平等问题。我期待的参数是复杂的对象,它实际上使Assert.AreEqual(...);
希望在同样的情况下加快其他人的速度。这是失败的测试。
[Test]
public void Test()
{
var expectedInput = new Object1 { DeeperObject = new Object2 { MyString = "Hello World" } };
const string expectedOutput = "Hello Matt!";
_mockOne.Expect(s => s.ReturnSomething(expectedInput))
.Return(expectedOutput);
var actualInput = new Object1 { DeeperObject = new Object2 { MyString = "Hello World" } };
var actualOutput = _mockOne.ReturnSomething(actualInput);
Assert.NotNull(actualOutput);
}
要解决此问题,参数属性需要专门匹配。
将以_mockOne.Expect
开头的行替换为:
_mockOne.Expect(s => s
.ReturnSomething(Arg<Object1>
.Matches(o => o.DeeperObject.MyString == expectedInput.DeeperObject.MyString)))
.Return(expectedOutput);
完成。