c# - 不同的模拟对象来比较单元测试中的对象

标签 c# .net xunit.net xunit

我正在尝试测试 Equals 方法。如果传递给的对象与此对象相同,则此方法返回 true。

我测试真实条件如下。

        var mocks = new MockRepository();
        var mockActionAlert = mocks.StrictMock<ActionAlert>();
        var mockActionAlert2 = mocks.StrictMock<ActionAlert>();
        bool comparer = mockActionAlert.Equals(mockActionAlert2);
        Assert.Equal(true, comparer);

但是,我怎样才能得到一个不同的模拟对象来测试 equal 方法是否返回 false。

谢谢你,

最佳答案

您所展示的内容似乎根本没有任何意义。

您的测试代码中只有模拟 - 根本没有真正的实现。

您不仅没有测试任何真实的东西,而且由于您使用的是模拟,您甚至可以决定假装测试是否应该失败。

要执行(我认为)您想要的操作,只需创建一个 ActionAlert(一个来自您的真实代码,而不是一个模拟代码),然后创建第二个 ActionAlert,其属性应使用您的 Equals 方法使其相等。传递第二个 ActionAlert 并断言结果为真(可能最好使用 Assert.True() 因为它更能表达意图)。

然后在测试 Equals 方法是否返回 false 时,使用 ActionAlerts 编写测试,使其具有使它们不等于的属性。根本不需要模拟。

你需要模拟的地方是你在被测类中有依赖关系的地方,你想要断言一些行为(以某种方式调用依赖方法)或者你想要一些预定义的行为(制作一个方法在调用时返回特定值)。

关于c# - 不同的模拟对象来比较单元测试中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6207625/

相关文章:

c# - MVVMLight 中的 IoC 容器 - 如何将具体实现传递给指定的元素?

c# - 使用扩展方法分配属性的好方法

c# - 异步处理消息时的BasicAck

unit-testing - 如何在 xunit.net 中测试两个对象是否相等?

c# - TimeZone.CurrentTimeZone 替代方案

c# - 在 PostgreSQL 中读取 bytea 数据很慢

c# - 如何将泛型类型作为参数传递给 Enum.Parse()

c# - 生成一个范围内的 N 个随机且唯一的数字

c# - 使用来自外部文件的数据进行 xUnit 测试

c# - 单元测试 c# 模拟接口(interface)由另一个接口(interface)组成