我試圖測試一個組成控件集合的方法。它調用兩種方法:Presenter中的單元測試方法,MVP
- 複製原始集合。
- 排序新的集合。
理想情況下,id希望能夠傳入一個集合並進行測試,看看它是否正確排序。編號也想驗證方法1)被調用了兩次,見下文基於以下嘗試:當我嘗試創建MainPresenter的實例 Example using RhinoMock
下面的測試產生錯誤。一般jist的錯誤是「無法從Moq.Mock轉換爲」FrazerMann.CsvImporter.UserInterface.IMainForm。 +類似的一個IFileDialog。
[Test]
public void ComposeCollectionOfControls_CallSequence_4Calls()
{
var main = new Mock<IMainForm>();
var dialog = new Mock<IFileDialog>();
var temp = new Mock<IMainPresenter>();
temp.Setup(s => s.PopulateLists<Control>(It.IsAny<TableLayoutPanel>(), It.IsAny<List<Control>>()));
var testObject = new MainPresenter(main.Object, dialog.Object);
testObject.ComposeCollectionOfControls(It.IsAny<object>(), It.IsAny<EventArgs>());
temp.Verify(v => v.PopulateLists<Control>(It.IsAny<TableLayoutPanel>(), It.IsAny<List<Control>>()), Times.Once());
}
我想測試ComposeCollectionOfControls確保PopulateList()被調用了兩次。
public interface IMainPresenter
{
void PopulateLists<T>(TableLayoutPanel userInputs, List<T> container) where T : Control;
int SortList<T>(T control1, T control2) where T : Control;
}
public class MainPresenter:IMainPresenter
{
UserInputEntity inputs;
IFileDialog _dialog;
IMainForm _view;
public MainPresenter(IMainForm view, IFileDialog dialog)
{
_view = view;
_dialog = dialog;
view.ComposeCollectionOfControls += ComposeCollectionOfControls;
view.SelectCsvFilePath += SelectCsvFilePath;
view.SelectErrorLogFilePath += SelectErrorLogFilePath;
view.DataVerification += DataVerification;
}
public void ComposeCollectionOfControls(object sender, EventArgs e)
{
PopulateLists<TextBox>(_view.ColumnNameCtrls, _view.SortedColumnNameCtrls);
_view.SortedColumnNameCtrls.Sort(SortList<TextBox>);
PopulateLists<ComboBox>(_view.ColumnDataTypeCtrls, _view.SortedColumnDataTypeCtrls);
_view.SortedColumnDataTypeCtrls.Sort(SortList<ComboBox>);
}
}
可能有人請給我一些指點,如何這應該怎麼辦?
臉掌!非常感謝David –
非常感謝您對原始答案的編輯,我沒有意識到這一點。出於好奇(這是我的事件處理程序調用一個單獨的方法的原因,但你昨天提到這是錯誤的,所以即時通訊假設我犯了一個愚蠢的錯誤),我得到一個空對象錯誤,我假設是由於這條線「testObject .ComposeCollectionOfControls(It.IsAny