我想用Rhino Mocks追踪一个方法的调用。假设我有这样的代码:
public class A
{
protected IB _b;
public A(IB b)
{
_b = b;
}
public void Run( string name )
{
_b.SomeCall(new C { Name = name });
}
}
public interface IB
{
void SomeCall( C c );
}
public class C
{
public string Name { get; set; }
// more attributes here
}测试结果如下:
// prepare
var bMock = Rhino.Mocks.MockRepository.GenerateStrictMock<IB>();
bMock.Expect(x => x.SomeCall(new C { Name = "myname" }));
var sut = new A(bMock);
// execute
sut.Run("myname");
// assert
bMock.VerifyAllExpectations();测试在ExpectedViolationException中失败,因为Rhino框架检测到两个不同的C类。
如果测试中的主题将对象参数创建到所测试的方法中,如何检查调用?有没有机会告诉Rhino检查参数为“等于”?
谢谢你一吨!
发布于 2012-08-24 07:59:32
我建议您使用更简单(更易于维护)的AAA语法。在大多数情况下,严格的模仿比其他任何事情都更痛苦。
使用Equals对参数进行比较。如果C不覆盖Equals,则通过引用进行比较,在您的情况下将不匹配。使用Matches以其他方式检查参数。
// arrange
var bMock = MockRepository.GenerateMock<IB>();
var sut = new A(bMock);
// act
sut.Run("myname");
// assert
bMock.AssertWasCalled(x => x.SomeCall(Arg<C>.Matches(y => y.Name == "myname"));发布于 2012-08-24 07:50:00
您需要添加IgnoreArguments,并且还可以为调用“SomeCall”添加参数约束:
bMock.Expect(x => x.SomeCall(new C { Name = "myname" }))
.IgnoreArguments()
.Constraints(new PropertyConstraint(typeof(C), "Name",
Rhino.Mocks.Constraints.Is.Equal("myname")));https://stackoverflow.com/questions/12105060
复制相似问题