2013-08-01 33 views
0

我想要做的是在运行单元测试时动态地创建表单。实际的表格只能用作进度条。我的单元测试正在使用Selenium库来测试网站,并且拥有某种进度条会很好。我试图在测试过程中创建新表单,但在测试正在执行时,表单只是挂在那里。谢谢!运行单元测试时可以打开新窗体吗?

[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); 
    } 
+0

你能告诉我们你的代码吗?我怀疑这是线程管理问题 –

+0

下一次,如果你想让人知道你已经编辑过这篇文章,写评论,否则我不知道... –

+0

对不起,我的坏。我会确保我下次还会这样做 – Tomas

回答

0

这里是一个简单的进度条例如

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(); 
} 

发现其中的差别:你的后台工作做了一些工作并报告,但没有人抓住它,或者你没有显示你的所有代码。无论如何,你可以拿这个代码

+0

你是对的,我没有显示我的所有代码,因为我认为它不是很相关。我试图找出的是如何在单元测试中创建表单,使其不会被阻止 – Tomas

+0

@Tomas这段代码完全是这样做的。如果您不想显示代码的其余部分,或者您可以在代码中查找哪些事件未被处理,您可以用此替换您的代码。 –

+0

这是一个有效的代码。但是如果你尝试在单元测试中创建这个表单,它就会冻结。也许我做错了什么。 – Tomas

相关问题