首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Rhino Mocks - 正确使用Arg <T> .Ref

Rhino Mocks 是一个用于 C# 的模拟对象框架,它允许开发者在单元测试中创建模拟对象,以验证代码的行为。Rhino Mocks 是一个开源项目,可以在 GitHub 上找到它的源代码。

在 Rhino Mocks 中,Arg<T> 是一个用于验证方法参数的类。使用 Arg<T> 可以验证方法是否被调用,以及传递给方法的参数是否符合预期。

要正确使用 Arg<T> .Ref,首先需要创建一个模拟对象,然后设置预期行为,最后验证模拟对象的行为是否符合预期。以下是一个简单的示例:

代码语言:typescript
复制
public interface IMyService
{
    void MyMethod(string value);
}

[Test]
public void MyMethod_Called_With_Correct_Value()
{
    // Arrange
    var mocks = new MockRepository();
    var myService = mocks.StrictMock<IMyService>();

    // Expected behavior
    Expect.Call(myService.MyMethod(Arg<string>.Ref(Is.Equal("expected value"), "value").Dummy));

    // Replay the mock
    mocks.ReplayAll();

    // Act
    myService.MyMethod("expected value");

    // Verify the mock
    mocks.VerifyAll();
}

在这个示例中,我们创建了一个名为 IMyService 的接口,并实现了一个名为 MyMethod 的方法。然后,我们使用 Rhino Mocks 创建了一个模拟对象 myService,并设置了预期行为。我们使用 Arg<string>.Ref 方法来验证 MyMethod 方法是否被调用,并且传递给它的参数是否等于 "expected value"。最后,我们使用 VerifyAll 方法来验证模拟对象的行为是否符合预期。

总之,Rhino Mocks 是一个强大的 C# 模拟对象框架,可以帮助开发者编写更好的单元测试。Arg<T> 类是 Rhino Mocks 中的一个重要工具,可以用于验证方法参数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 在 vue-test-utils 中 mock 全局对象

    } } 基于这个 locale,正确的翻译将被渲染出来。...$t is not a function" 这是因为我们并未安装 vue-i18n,所以全局的 $t 方法并不存在。...(译注:通过这种方式就不能在单元测试中耦合与特定语言相关的内容了,因为翻译功能实际上已失效,也更无法处理可选参数等) 使用配置设置默认的 mocks 有时需要一个 mock 的默认值,这样就不用为每个测试用例都设置一遍了.../src/translations.js" const locale = "en" VueTestUtils.config.mocks["$t"] = (msg) => translations[locale... (译注:依然无法应付复杂的翻译) 总结 本文论述了: 在测试用例中使用 mocks 以 mock 一个全局对象 用 config.mocks 设置默认的 mock

    1.6K10

    Go单测系列4—mock接口测试

    使用上面提到的 mockgen 工具来为生成相应的mock代码。通过执行下面的命令,我们就能在当前项目下生成一个mocks文件夹,里面存放了一个db_mock.go文件。...mockgen -source=db.go -destination=mocks/db_mock.go -package=mocks db_mock.go文件中的内容就是mock相关接口的代码了。...例如,我们编写TestGetFromDB 函数如下: // db_test.go func TestGetFromDB(t *testing.T) { // 创建gomock控制器,用来记录后续的操作信息...调用mockgen生成代码中的NewMockDB方法 // 这里mocks是我们生成代码时指定的package名称 m := mocks.NewMockDB(ctrl) // 打桩(stub)...gomock.Nil()).Return(-1, nil) 这里单独说一下SetArg的适用场景,假设你有一个需要mock的接口如下: type YourInterface { SetValue(arg

    56830

    关于单元测试

    Mock类库一般情况下都是鸡肋 我在开始推动单元测试的时候就详细的研究了Rhino.Mocks类库。当时也被它强大语法能力所折服。并且实际将该类库应用在了我们项目的单元测试中。...可是,过了一段时间后,当我再次需要使用Mock对象的时候。我才发现,我自己写一个Mock对象的成本其实非常低。远低于学习Rhino.Mocks抽象的语法的成本低。...但是,不推荐使用Mock类库,不等于你不需要学习和了解Mock类库。因为学习他们的接口会对你自己设计Mock对象非常有帮助。 3....这是我在使用单元测试过程中最郁闷的地方。...=-=-=-=-=-=-=-=-=-=-不明真相围观的分割线-=-=-=-=-=-=-=-=-=-=-=-=-=- 以下最后两点属于我的想法,目前的项目中因为前面的一些约束,导致我还无法证明我的想法是正确的或错误的

    77880

    【Rust 基础篇】Rust中的不安全代码:谨慎探索黑盒之门

    本篇博客将深入探讨Rust中的不安全代码,包括不安全代码的定义、使用场景、使用方法以及潜在的风险和注意事项,以便读者了解在何种情况下使用不安全代码,并且避免由于不正确使用不安全代码而引发的安全问题。...// 使用不安全代码调用C语言的库函数 extern "C" { fn c_function(arg: i32) -> i32; } fn call_c_function(arg: i32)...struct Node { data: T, next: *mut Node, } impl Node { fn new(data: T) -> Self...不安全代码的使用方法 使用不安全代码需要遵循一些规则,以确保在编写和运行时能够保持代码的正确性和安全性。 3.1 不安全块 在Rust中,使用unsafe关键字来标识不安全代码块。...data的引用data_ref

    32820

    浅谈前端测试

    success run console.log', () => {  mocks.fs.readFileSync.mockImplementation(() => this.mocks.other.text...toBeCalledWith 来代替 toBeCalled,不仅要测试执行了,而且要测试参数正确,简单修改为 expect(global.console.log).toBeCalledWith(this.mocks.other.text...避免多个测试用例之间复杂化 mock 导致错误   小结:单元测试中的 mock 是个测试思路,我们无需关心外部文件和依赖是什么,只要能模拟出正确的情况程序是否按规则执行,错误的情况程序是否有异常处理,...逻辑是否正确等。...只是一个例子,实际上逻辑会比这个复杂的多   那就聊一聊解决方案   mock 数据的随机化,每次测试生成随机的 list 进行测试,现有库 mockjs   强关联测试,证明 map 方法的确执行了,并且参数正确

    1.7K10
    领券