所以我有一个单元测试,它使用类ImpositionCalculatorManager
类中的方法。在这个类中,我使用依赖注入,所以我可以访问另一个类ImpositionCalculatorRepository
上的方法。构造函数的参数不能传递接口模拟 - 最小起订量
的ImpositionCalculatorManager
看起来是这样的:
public class ImpositionCalculatorManager : IImpositionCalculatorManager {
private readonly IImpositionCalculatorRepository _impositionCalculatorRepository;
public ImpositionCalculatorManager(IImpositionCalculatorRepository impositionCalculatorRepository) {
_impositionCalculatorRepository = impositionCalculatorRepository;
}
public ComboBoxItem[] ReturnInkDataSource() {
return _impositionCalculatorRepository.ReturnInkDataSource();
}
public ComboBoxItem[] ReturnCoatingDataSource() {
return _impositionCalculatorRepository.ReturnCoatingDataSource();
}
}
}
在我的单元测试我嘲笑ImpositionCalculatorManager
,并在嘲笑ImpositionCalculatorRepository
版本传入构造为管理器类。
但是,我收到错误Constructor arguments cannot be passed for interface mocks
。
这是我的单元测试夹具的样子:
public class ImpositionCalculatorPresenterTestFixture {
private ImpositionCalculatorPresenter _impositionCalculatorPresenter;
private readonly SystemVariablesPresenter _systemVariablesPresenter;
private readonly Mock<IImpositionCalculatorManager> _mockImpositionCalculatorManager;
private readonly Mock<ISystemVariablesView> _mockSystemVariablesView;
private readonly Mock<IPrintingDesignManager> _mockPrintingDesignManager;
private readonly Mock<ISystemVariablesManager> _mockSystemVariablesManager;
private readonly Mock<IImpositionCalculatorRepository> _mockImpositionCalculatorRepo;
private Mock<IImpositionFormView> _mockView;
public ImpositionCalculatorPresenterTestFixture() {
_mockImpositionCalculatorRepo = new Mock<IImpositionCalculatorRepository>();
//Error occurs on the below line
_mockImpositionCalculatorManager = new Mock<IImpositionCalculatorManager>(_mockImpositionCalculatorRepo.Object);
_mockSystemVariablesView = new Mock<ISystemVariablesView>();
_mockPrintingDesignManager = new Mock<IPrintingDesignManager>();
_mockSystemVariablesManager = new Mock<ISystemVariablesManager>();
_systemVariablesPresenter = new SystemVariablesPresenter(_mockSystemVariablesView.Object, _mockSystemVariablesManager.Object);
}
[TestMethod]
public void PopulateInkDataSources_ApplicationOnLoad_InkDataSourcesPopulatedWithDataFromJSON() {
//Arrange
SetupImpostionPresenter();
_mockView.SetupProperty(r => r.InkSideOneDataSource);
_mockView.SetupProperty(r => r.InkSideTwoDataSource);
_mockImpositionCalculatorManager.Setup(r => r.ReturnInkDataSource())
.Returns<ComboBoxItem[]>
(x => new ComboBoxItem[] {
new ComboBoxItem("Test", 1),
new ComboBoxItem("Test 2", 2)
});
//Act
_mockView.Raise(r => r.FormOnLoad += null, new EventArgs());
//Assert
Assert.IsTrue(_mockImpositionCalculatorManager.Object.ReturnInkDataSource()
== _mockView.Object.InkSideOneDataSource && _mockImpositionCalculatorManager.Object.ReturnInkDataSource()
== _mockView.Object.InkSideTwoDataSource
);
}
private void SetupImpostionPresenter() {
_mockView = new Mock<IImpositionFormView>();
_impositionCalculatorPresenter = new ImpositionCalculatorPresenter(_mockView.Object,
_mockImpositionCalculatorManager.Object, _mockSystemVariablesManager.Object, _systemVariablesPresenter,
_mockPrintingDesignManager.Object);
}
}
}
我看着在堆栈溢出,人们说这是因为接口不具有构造函数,只有类不和我不应该将任何东西传递给构造函数,但是当我从模拟中移除构造函数参数时,在尝试从管理器设置方法时收到错误Parameter count mismatch
。
我只是想嘲笑经理,所以我可以设置一个方法来返回我已经设置的值。
为什么这不起作用?
看起来你在这里失踪模拟声明 '私人只读模拟< IImpositionCalculatorPresenter> _impositionCalculatorPresenter;' – Ripon
我的演示者不是一个接口,我必须让所有的方法都是虚拟的,我不想这样做。这样做会有所作为吗? – Andrew