【发布时间】:2018-06-05 04:14:28
【问题描述】:
我有要测试的方法,但我收到此错误“在创建窗口句柄之前无法在控件上调用 Invoke 或 BeginInvoke。”现在我还有一个列表框,正在我正在测试的那个函数中填充。因此,当我将方法分离到另一个类时,这是一个问题。
我理解这一点,因为表单需要先运行,但还有其他选择吗?
public partial class ImportForm : Form
{
public ImportForm()
{
}
public bool Test(string[] fileNames)//Method to test
{
foreach (DataTable table in result.Tables)
{
foreach (DataRow dr in table.Rows)
{
if (!db.CouncilRefundCases.Any(
c => c.RequestReference == dr.ItemArray[1].ToString()))
{
CouncilRefundCase data = new CouncilRefundCase()
{
FileId = fileId,
RequestReference = Convert.ToString(dr.ItemArray[1]),
CancelReason = Convert.ToString(dr.ItemArray[2]),
ProcessStatusId = (int?)ProcessStatus.Unprocessed,
ProcessDescription = new EnumHelper().GetDescription(ProcessStatus.Unprocessed),
DateCaptured = DateTime.Now
};
db.CouncilRefundCases.InsertOnSubmit(data);
//Succeeded ones
var item = new ListViewItem(dr.ItemArray[1].ToString());
lstSuccessSummary.Invoke((Action)delegate
{
lstSuccessSummary.Items.Add(item);
});
}
else
{
//Failed ones
var item = new ListViewItem(dr.ItemArray[1].ToString());
lstSummary.Invoke((Action)delegate
{
lstSummary.Items.Add(item);
});
}
}
}
return true;
}
}
这是我的单元测试
[TestMethod]
public void TestTest()
{
bool results=false;
var files = new string[4];
files[0] = @"filename1.xlsx";
files[1] = @"filename2.xlsx";
ImportForm form= new ImportForm();
results = form.Test(files);
Assert.AreEqual(true, results);
}
【问题讨论】:
-
虽然我建议将逻辑与 Winforms 分开以进行更好的测试 - 您仍然可以进行很好的测试,这将测试整个应用程序(UI 和逻辑)。检查https://github.com/TestStack/White
标签: c# .net winforms unit-testing mstest