使用RhinoMocks,我如何断言调用了几种方法之一?

2024-05-26

考虑以下服务接口:

public interface IServiceA
{
    void DoSomething(string s);
    void DoSomething(string s, bool b);
}

public interface IServiceB
{
    void DoSomething();
}

IServiceB 的实现依赖于 IServiceA,如下所示:

public class ServiceB : IServiceB
{
    private IServiceA _serviceA;

    public ServiceB(IServiceA serviceA)
    {
        _serviceA = serviceA;
    }

    public void DoSomething()
    {
        _serviceA.DoSomething("Hello", true);
    }
}

IE。依赖项被注入到构造函数中。

现在考虑一个单元测试DoSomething()方法。我希望断言 IServiceA 中的重载 DoSomething 方法之一被调用,但遵循单元测试不应该过多了解被测试方法的内部工作原理的一般原则,我希望不知道哪个是调用了两个重载。考虑以下单元测试:

[TestFixture]
public class ServiceBTests
{
    [Test]
    public void DoSomething_CallsServiceA()
    {
        var serviceAMock = MockRepository.GenerateMock<IServiceA>();
        var service = new ServiceB(serviceAMock);

        service.DoSomething();

        // Problem: How to check if EITHER:
        serviceAMock.AssertWasCalled(s => s.DoSomething(Arg<String>.Is.NotNull, Arg<bool>.Is.Anything));
        // OR:
        serviceAMock.AssertWasCalled(s => s.DoSomething(Arg<String>.Is.NotNull));
    }
}

我怎样才能断言either one or调用了两个方法中的另一个?


您可以手动设置布尔标志,如下所示:

[TestFixture]
public class ServiceBTests
{
    [Test]
    public void DoSomething_CallsServiceA()
    {
        var serviceAMock = MockRepository.GenerateMock<IServiceA>();
        bool called = false;
        serviceAMock.Stub(
             x => x.DoSomething(Arg<String>.Is.NotNull, Arg<bool>.Is.Anything))
            .WhenCalled(delegate { called = true; });
        serviceAMock.Stub(x => x.DoSomething(Arg<String>.Is.NotNull))
            .WhenCalled(delegate { called = true; });

        var service = new ServiceB(serviceAMock);

        service.DoSomething();

        Assert.IsTrue(called);
    }
}

但我认为这不是很有用。单元测试涉及从组件边界之外可观察到的任何内容。对模拟的方法调用是其中的一部分。换句话说,如果您测试正在调用的特定重载就可以了。毕竟,您使用该重载而不是另一个重载一定是有原因的。

如果您确实希望单元测试对实现一无所知,则根本不允许您在模拟上断言方法调用。这将严重限制您编写测试的能力。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用RhinoMocks,我如何断言调用了几种方法之一? 的相关文章

  • 使用 NSURLSession 进行单元测试

    我想为使用共享的方法编写单元测试NSURLSession 特别是 NSURLSessionDataTask下载数据 基本上 我希望目标方法能够接收模拟响应 数据 而不需要互联网连接 模拟这些组件的不太不显眼的方式是什么 我正在考虑填充NSU
  • 最终属性 @Value 中的 Spring 属性注入 - Java

    一个关于 Spring 从属性文件注入最终属性的简单问题 我有一个属性文件 我想在其中存储文件路径 通常 当我使用属性文件时 我使用如下内容设置类属性 private Value someProps prop field String so
  • 如何测试 Flask 开发服务器是否已启动?

    我的 Flask 应用程序上有一个测试装置 它启动开发服务器来测试一些用户交互 对于第一个测试 我想确保服务器已启动 一般而言 无需测试特定响应代码 执行此操作的最佳方法是什么 我希望我能用self assertTrue response
  • 构造函数上的分支未涵盖

    我正在使用 Jasmine 创建单元测试 我对所涵盖的分支有疑问 有谁知道为什么代码部分显示分支没有被覆盖 如下所示 这是单元测试 describe MyComponent gt let component MyComponent let
  • 单元测试:独立测试与代码重复(DRY)

    我正在迈出单元测试的第一步 并且不确定在单元测试中似乎相互矛盾的两个范式 即 每个单元测试都应该是独立的 不依赖于其他单元测试 不要重复自己 更具体地说 我有一个要测试的导入器 导入器具有 导入 功能 获取原始数据 例如 从 CSV 中取出
  • 使用 Rhino Mocks 模拟集合

    所以我猜这是很多人想做的事情 模拟集合 过去我用 Rhino 做过这样的事情 var col mock MockRepository GenerateMock
  • JUnit 集成测试的“IT.java”文件名后缀(而不是“Test.java”)是否是一种约定? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我习惯于用一个名称来命名我的 JUnit 集成测试 Test java最后例如DatabaseConnectionTest java并将它们放在
  • Python 中的“断言”有什么用?

    什么是assert意思是 它是如何使用的 The assert语句几乎存在于所有编程语言中 它有两个主要用途 它有助于在程序早期发现问题 原因明确 而不是等到其他操作失败时才发现问题 例如 Python 中的类型错误在实际引发错误之前可能会
  • 使用单元测试项目中定义的 Startup 类时.NET Core TestServer 返回 404

    我有一个基本的 net core api web 应用程序和一个使用 TestServer 发出 http 请求的单元测试项目 我有一个 TestStartup 类 它是 api 项目中 Startup 类的子类 如果 Startup 类位
  • Mediatr 范围问题

    我正在使用 Mediatr 处理来自队列的消息 我可以得到一个简单的例子来工作 但是 当我尝试将对象注入到我的处理程序中时 我遇到了问题 public class MessageCommandHandler IRequestHandler
  • QUnit 不会运行测试

    我刚刚开始使用 QUnit 并遇到问题 我目前正在使用 TypeScript 它是一个 JavaScript 编译器 我在与我的主要课程结构平行的课程中进行测试 在每个类中 我都有一个名为 runTests 的函数 为了执行这些测试 我循环
  • .NET 中有什么方法可以以编程方式侦听 HTTP 流量吗?

    我正在使用浏览器自动化来测试网站 但我需要验证来自浏览器的 HTTP 请求 即图像 外部脚本 XmlHttpRequest 对象 有没有一种方法可以以编程方式实例化代理以供浏览器使用以查看其发送的内容 我已经在使用 Fiddler 来监视流
  • 按类型进行弹簧接线比按名称接线要慢很多

    在我的项目中 我试图迁移 Foo foo Foo beanFactory getBean name into Foo foo beanFactory getBean Foo class 好处是显而易见的 类型安全 更少复杂的代码 更少无用的
  • Moq - 如何对方法中引用的更改进行单元测试

    另一天 另一个问题 我的服务层有以下方法 public MatchViewData CreateMatch string user var matchViewData HasReachedMaxNumberOfMatchesLimit us
  • 使用 Retrofit2 和 Mockito 或 Robolectric 进行 Android 单元测试

    我可以测试 Retrofit2beta4 的真实响应吗 我需要 Mockito 或 Robolectic 吗 我的项目中没有活动 它将是一个库 我需要测试服务器是否正确响应 现在我有这样的代码并卡住了 Mock ApiManager api
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • Cucumber Java 与 Spring Boot 集成 - Spring @Autowired 抛出 NullPointer 异常

    我正在为 Spring boot 应用程序编写 cucumber java 单元测试来测试每个功能 当我与 Spring Boot 集成时 Autowired 类抛出 NullPointer 异常 Spring Boot应用程序类 Spri
  • 是否可以将路由参数传递给 Laravel 中的控制器构造函数?

    是否可以将路由参数 或路由段 注入到控制器构造函数中 您找到一些代码来澄清我的问题 class TestController protected param public function construct paramFromRoute
  • 如何使用 google test for C++ 来运行数据组合

    我有一个单元测试 需要针对 200 种可能的数据组合运行 生产实现在配置文件中有要测试的数据 我知道如何模拟这些值 我更喜欢为每个组合编写单独的测试用例 并使用某种方式循环数据 有没有使用 Google test for C 的直接方法 您
  • 工作流程系统中的单元/自动化测试

    您是否对像 K2 这样的复杂工作流程系统进行自动化测试 我们正在构建一个在 Sharepoint 2007 和 K2 之间进行广泛集成的系统 我什至无法想象从哪里开始自动化测试 因为工作流程涉及多个用户与 Sharepoint K2 工作流

随机推荐