Rhino Mocks 异常 Expect #1 Actual #0 :需要帮助

2023-12-31

我已经对此进行了搜索,它似乎是一个包罗万象的东西,不幸的是我读过的所有内容都无助于弄清楚它。这是课程:

public interface IMockInterface
{
    MockClass MockedMethod();
    MockClass MockThis();
}

public class MockClass : IMockInterface
{
  public virtual MockClass MockedMethod()
  {
    MockClass returnValue;

    returnValue = new MockClass();
    returnValue.SomeMessage = "Not mocked";
    return returnValue;
  }

  public MockClass MockThis()
  {
    MockClass mock;
    MockClass returnValue;

    mock = new MockClass();

    return mock.MockedMethod();
  }
}

和测试:

public void MockTest_Internal()
{
  MockClass mainClass;
  MockClass returnedClass;
  IMockInterface mockProvider;

  mainClass = new MockClass();

  mockProvider = repository.StrictMock<IMockInterface>();
  Expect.Call(mockProvider.MockedMethod())
    .Return(new MockClass { SomeMessage = "Mocked" });
  repository.ReplayAll();

  returnedClass = mainClass.MockThis();
  provider.AssertWasCalled(item => item.MockedMethod());

  Assert.IsTrue(returnedClass.SomeMessage == "Mocked");
}

并且也尝试过但行不通

但我不断收到此异常:

Rhino.Mocks.Exceptions.ExpectationViolationException:
IMockInterface.MockedMethod();预期 #1,实际 #0

现在,从我读到的内容来看,这表明要么使用与预期参数不同的参数调用该方法,要么该方法从未被调用但预计会被调用。测试的情况并非如此。

旁注:这是我第一次真正使用 Rhino.Mocks,没有一些内部代码,所以我基本上是一边走一边拿起它。这里可能有一些非常愚蠢的事情......

这是评论的旧测试,但不是我应该使用的:

public void MockTest_Internal()
{
  MockClass mainClass;
  MockClass returnedClass;
  IMockInterface mockProvider;

  mainClass = new MockClass();

  var provider = MockRepository.GenerateStub<IMockInterface>();
  provider.Stub(item => item.MockedMethod())
    .Return(new MockClass { SomeMessage = "Mocked" });

  returnedClass = mainClass.MockThis();
  provider.AssertWasCalled(item => item.MockedMethod());

  Assert.IsTrue(returnedClass.SomeMessage == "Mocked");
}

您告诉模拟框架在提供程序对象上存根 MockedMethod 类,但您从未将提供程序注入到要使用的 mainClass 对象中。我不清楚你想要完成什么,但如果你想要调用模拟方法,那么必须在设置存根的对象上调用它。

如果你定义MockThis如下所示,我想你会发现它会起作用。

public MockClass MockThis(IMockInterface provider)
{
    return provider.MockMethod();
}

最重要的是,您会得到异常,因为该方法从未在提供者上调用,仅在 mainClass 对象上调用。

EDIT: 例子

public class ClassUnderTest
{
    private ProviderClass provider { get; set; }

    public ClassUnderTest( ProviderClass provider )
    {
        this.Provider = provider;
    }

    public int DoOperation()
    {
        return this.Provider.ProviderOperation();
    }
}

public class ProviderClass
{
    private int value = 42;
    public ProviderClass()
    {
    }

    public virtual int ProviderOperation()
    {
        return this.value;
    }
}


[TestMethod]
public void DoOperationTest()
{
     ProviderClass mockProvider = MockRepository.GenerateMock<ProviderClass>();
     mockProvider.Expect( mp => mp.ProviderOperation() ).Return( -1 );

     ClassUnderTest target = new ClassUnderTest( mockProvider );

     int expectedValue = -1;
     int value = target.DoOperation();

     Assert.AreEqual( expectedValue, value );

     mockProvider.VerifyAllExpectations();
}

通常,ProviderClass 对象会从 ProviderOperation 方法返回 42,但我们已经模拟了它并告诉它返回 -1。当调用 ClassUnderTest DoOperation 方法时,将调用模拟提供程序对象的 ProviderOperation 方法并返回模拟值 -1。

希望这可以帮助。

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

Rhino Mocks 异常 Expect #1 Actual #0 :需要帮助 的相关文章

随机推荐

  • Android 视图转换动画列表?

    是否有可用于在两个视图之间转换的所有动画的列表 IE 缩放 滑动 脸部等 我似乎无法在 SDK 中或通过搜索 Google 找到完整的列表 此外 是否有任何演示应用程序可以显示所有这些内容 以便我可以评估哪个最适合特定用例 无法创建完整的动
  • 将对象列表作为外键

    如果我有两节课 public class Event public int EventId get set public string EventName get set and public class Dog public int Do
  • 如何验证对 PHP 文件的 AJAX 请求?

    在我的网站上 我有一个注册页面 该页面会发出 AJAX 请求来检查用户名输入后是否可用 该文件名为 check php 与 Registration php 文件位于同一目录中 当数据发布到 check php 时 它将在 MySQL 数据
  • 您网站上的多个 signalR 连接/集线器

    如果我有多个页面可以使用多个集线器类 那么管理此问题的最佳方法是什么 例如 导航到网站中的另一个页面并本质上 重新打开 与上一页上打开的同一集线器类的连接是否不好 我是否正确地认为在一个页面上打开多个集线器连接是可以的 因为它们都统一在一个
  • 如何开始对新旧代码进行单元测试?

    我承认我几乎没有单元测试的经验 我不久前尝试过 DUnit 但放弃了 因为我的应用程序中的类之间存在太多依赖关系 这是一个相当大的 大约 150 万行源代码 Delphi 应用程序 我们是一个维护它的团队 目前的测试是由一个在发布之前使用它
  • SupportMapFragment 不支持 AndroidX Fragment

    import com google android gms maps SupportMapFragment import androidx fragment Fragment private SupportMapFragment mMapF
  • 如何使用python删除循环列表的元素直到只剩下一个元素? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我将如何迭代从 1 到 100 的列表 删除从第一个元素开始的所有其他元素 然后重复该步骤 直到列表中只剩下一个元素 我是否必须使用循
  • 文件名中包含两个句点的 htaccess 正则表达式

    我现在有这个表达式 需要site com index php to site com index RewriteCond SCRIPT FILENAME d RewriteRule 1 php NC L 我需要让它接受包含两个句点的文件名
  • Postgresql JSONB 即将到来。现在该用什么?商店? JSON? EAV?

    在经历了关系型 DB NoSQL 研究辩论之后 我得出的结论是我将继续使用 PG 作为我的数据存储 该决定的一个重要部分是宣布 JSONB 即将推出 9 4 我的问题是我现在应该做什么 从头开始构建一个应用程序 知道我想迁移到 我的意思是立
  • 奇怪的 ASP.NET AJAX Bug / 32 位到 64 位

    自从升级到 Windows 2008 64 位后 我的网站出现了奇怪的错误 我的大部分应用程序池都在 64 位模式下运行 除了一个之外 所有应用程序池都用于旧版 ASP NET 1 1 应用程序 在 64 位运行的网站上 我收到来自 ASP
  • 发布消息时出现“无法识别的 Windows 套接字错误:0:接收失败”

    我正在尝试通过 HttpClient 将 HTTP POST 发布到启用了客户端身份验证的服务器 这是我的代码 public class Send2Remote private static String sslMode null priv
  • 具有 mpz/mpfr 值的 numpy 数组

    我想要一个带有 mpz mpfr 值的 numpy 数组 因为我的代码 import numpy as np import gmpy2 A np ones 5 5 print A gmpy2 mpfr 1 生成 RuntimeWarning
  • 在mplot3d中绘制右手坐标系

    我想从 Python 创建 3D 坐标变换图 例如 我想创建以下图像 由 TikZ 静态生成 经过一番搜索 我找到了以下程序 import numpy as np from matplotlib import pyplot as plt f
  • Windows 上 Git Bash 中的 X 会话?

    我在 Windows 上使用 Git Bash 我已经使用 Git Bash 通过 SSH 连接到 UNIX 机器 并尝试使用 GUI 运行程序 我收到消息 LINUX UNIX system detected but unable to
  • 如何跳过第一个孩子?

    div p one p p two p p three p p four p p five p div 我不想首先应用 css p One p p color red 我需要正好相反 first child With 否定伪类 http w
  • 如何重置 .NET Windows 窗体 TextBox BackColor 属性?

    属性的默认行为BackColor of a TextBox如下 启用后 是White SystemColors Window 禁用时它是灰色的 不确定这是什么系统颜色 如果我改变BackColor属性 启用和禁用使用相同的颜色 我该如何重置
  • 位于自定义relative_url_root 的综合 Gitlab 版本 7.4.3 (http://mydomain/gitlab)

    我已经成功安装了旧版本的 gitlab 并将它们托管在如下位置 mydomain gitlab 随着新版本的 gitlab 通过 gitlab ctl 完成所有配置并通过我编辑 etc gitlab gitlab rb 我不确定如何实现此设
  • Angular 2 使用 ngClass 执行 else

    我有以下模板 p 虽然这有效 但我发现它有点难看 因为我必须重复该条件两次 有没有办法做到类似 ngClass condition checked unchecked 这是行不通的 Thanks Indeed p p class or p
  • 使用 jQuery 隐藏 TinyMCE

    我里面有一个 TinyMCE 文本区域 container 当我使用 container hide 进而 container show tinyMCE 抛出 无法读取未定义的属性 选择 我正在使用 jquery 插件 所以这就是我的设置方式
  • Rhino Mocks 异常 Expect #1 Actual #0 :需要帮助

    我已经对此进行了搜索 它似乎是一个包罗万象的东西 不幸的是我读过的所有内容都无助于弄清楚它 这是课程 public interface IMockInterface MockClass MockedMethod MockClass Mock