Winforms 我可以在运行单元测试时打开新表单吗?
我想做的是在运行单元测试时动态创建表单。实际表单将仅用作进度条。我的单元测试使用Selenium库来测试网站,最好有一些进度条。我试着在测试中创建新的表单,但是当测试在执行时,表单就挂在那里。谢谢Winforms 我可以在运行单元测试时打开新表单吗?,winforms,unit-testing,Winforms,Unit Testing,我想做的是在运行单元测试时动态创建表单。实际表单将仅用作进度条。我的单元测试使用Selenium库来测试网站,最好有一些进度条。我试着在测试中创建新的表单,但是当测试在执行时,表单就挂在那里。谢谢 [TestMethod] public void test1() { using(Form1 form=new Form1()) { form.Show(); form.RunAsync();
[TestMethod]
public void test1()
{
using(Form1 form=new Form1())
{
form.Show();
form.RunAsync();
}
Assert.IsTrue(doSomeThing());
}
这就是现在的形式。这只是一个例子!backgroundworker应该填充进度条,但是,一旦表单出现,它就会冻结
BackgroundWorker bw;
private void RunAsync()
{
bw.RunWorkerAsync();
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
or (int i = 0; i < 100; i++)
{
Thread.Sleep(100);
bw.ReportProgress(i);
}
bw.ReportProgress(100);
}
BackgroundWorker bw;
私有void RunAsync()
{
RunWorkerAsync();
}
void bw_DoWork(对象发送方,DoWorkEventArgs e)
{
或(int i=0;i<100;i++)
{
睡眠(100);
bw.报告进展情况(一);
}
bw.报告进展情况(100);
}
下面是一个简单的进度条示例
public Form1()
{
InitializeComponent();
backgroundWorker1.DoWork += backgroundWorker1_DoWork_1;
backgroundWorker1.ProgressChanged += backgroundWorker1_ProgressChanged_1;
Load += Form1_Load_1;
}
private void Form1_Load(object sender, System.EventArgs e)
{
// Start the BackgroundWorker.
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i <= 100; i++)
{
// Wait 100 milliseconds.
Thread.Sleep(100);
// Report progress.
backgroundWorker1.ReportProgress(i);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// Change the value of the ProgressBar to the BackgroundWorker progress.
progressBar1.Value = e.ProgressPercentage;
// Set the text.
this.Text = e.ProgressPercentage.ToString();
}
public Form1()
{
初始化组件();
backgroundWorker1.DoWork+=backgroundWorker1\u DoWork\u 1;
backgroundWorker1.ProgressChanged+=backgroundWorker1\u ProgressChanged\u 1;
Load+=表格1\u Load\u 1;
}
私有void Form1_加载(对象发送方,System.EventArgs e)
{
//启动后台工作人员。
backgroundWorker1.RunWorkerAsync();
}
私有void backgroundWorker1\u DoWork(对象发送方,DoWorkEventArgs e)
{
对于(int i=1;我可以给我们看一下你的代码吗?我怀疑这是线程管理问题。下次如果你想让人们知道你编辑了这篇文章,请写一条评论,我不知道其他情况……对不起,我的错。我会确保我下次再做。你是想为每个测试或整个测试运行提供进度条吗?我想为每个测试添加进度条。基本上我选择是否显示,因为有些测试很短,不需要barYou是对的,我没有显示我所有的代码,因为我认为它不太相关。我试图找到的是如何在单元测试中创建表单,这样它就不会blocked@Tomas此代码正是这样做的。您可以将代码替换为如果你不想显示代码的其余部分,或者你可以搜索代码中没有处理的事件,这本身就是一个有效的代码。但是如果你试图在单元测试中创建这个表单,它就会冻结。也许我做错了什么。