首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >犀牛毛,VerifyAllExpectations

犀牛毛,VerifyAllExpectations
EN

Stack Overflow用户
提问于 2012-08-24 07:37:50
回答 2查看 6.1K关注 0票数 5

我想用Rhino Mocks追踪一个方法的调用。假设我有这样的代码:

代码语言:javascript
复制
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
}

测试结果如下:

代码语言:javascript
复制
// 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检查参数为“等于”?

谢谢你一吨!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-24 07:59:32

我建议您使用更简单(更易于维护)的AAA语法。在大多数情况下,严格的模仿比其他任何事情都更痛苦。

使用Equals对参数进行比较。如果C不覆盖Equals,则通过引用进行比较,在您的情况下将不匹配。使用Matches以其他方式检查参数。

代码语言:javascript
复制
// 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"));
票数 11
EN

Stack Overflow用户

发布于 2012-08-24 07:50:00

您需要添加IgnoreArguments,并且还可以为调用“SomeCall”添加参数约束:

代码语言:javascript
复制
bMock.Expect(x => x.SomeCall(new C { Name = "myname" }))
    .IgnoreArguments()
    .Constraints(new PropertyConstraint(typeof(C), "Name", 
        Rhino.Mocks.Constraints.Is.Equal("myname")));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12105060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档