c# - 将相同的界面模拟为 2 种不同的类型

标签 c# unit-testing mocking moq

我有一个接口(interface) IMyInterface,我正在使用 moq 在单元测试中模拟它。

Mock<IMyInterface> firstMockedObject = new Mock<IMyInterface>();
Mock<IMyInterface> secondMockedObject = new Mock<IMyInterface>();

被测单元有一个注册方法,如下所示:

public void RegisterHandler(Type 类型, IHandler 处理程序)

然后是句柄方法:

public void Handle(IMyInterface objectToHandle)

我要测试的是,我可以为 IMyInterface 的 2 个不同实现注册 2 个处理程序,并且 Handle 方法正确选择要使用的一个:

UnitUnderTest.RegisterHAndler(firstMockedObject.Object.GetType(), handler1);
UnitUnderTest.RegisterHAndler(seconMockedObject.Object.GetType(), handler2);

问题是两个模拟对象属于同一类型。有什么方法可以强制 Moq 生成 2 个相同接口(interface)的模拟作为不同类型?

最佳答案

创建两个从您的界面派生的界面。将它们用于模拟。每一个的类型都是模拟接口(interface)类型:

public interface IMockOne : IMyInterface { };
public interface IMockTwo : IMyInterface { };


var firstMockedObject = new Mock<IMockOne>();
var secondMockedObject = new Mock<IMockTwo>();

这使您无需为模拟实现整个类,而是使用 moq 创建动态模拟。

关于c# - 将相同的界面模拟为 2 种不同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33898243/

相关文章:

unit-testing - 在 MSTest 中组织测试名称

c# - "Inconclusive: Test not run"在 Visual Studio/Resharper 中以 Debug模式运行单元测试时出错

java - 任何人都应该在实时开发环境中使用单元测试库方法和类吗?

go - 如何在被测函数内创建模拟

c# - 如何从命令行执行omnisharp来格式化c#源文件?

c# - 如何正确地后处理 Refit 返回值?

python - 在以下情况下如何模拟方法调用?

php - 在 PHPUnit 模拟对象中返回不同的结果

c# - XNA - Mouse.Left Button 被多次执行

c# - 如何将所有文件编译成一个exe?