ImpositionCalculatorManager
というクラスのメソッドを使用するユニットテストがあります。このクラスでは依存関係注入を使用するので、ImpositionCalculatorRepository
という別のクラスのメソッドにアクセスできます。私のユニットテストでコンストラクタの引数はインターフェイスのモックに渡すことはできません - MOQ
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
に渡す:
ImpositionCalculatorManager
は次のようになります。
しかし、エラー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