加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Rhino Mocks,VerifyAllExpectations

发布时间:2020-12-15 18:16:21 所属栏目:百科 来源:网络整理
导读:我想跟踪一个使用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 );}
我想跟踪一个使用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 Mocks框架检测到2个不同的C类.

如果测试对象在被测方法中创建了对象参数,如何检查调用?有没有机会告诉Rhino Mocks将参数检查为“Equals”?

万分感谢!

解决方法

我建议您使用更容易(也更易于维护)的AAA语法.在大多数情况下,严格的嘲笑比其他任何事情更痛苦.

使用Equals比较参数.如果C不重写等于,则按引用进行比较,在您的情况下不匹配.使用匹配以其他方式检查参数.

// 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"));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读