Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms 我可以在运行单元测试时打开新表单吗?_Winforms_Unit Testing - Fatal编程技术网

Winforms 我可以在运行单元测试时打开新表单吗?

Winforms 我可以在运行单元测试时打开新表单吗?,winforms,unit-testing,Winforms,Unit Testing,我想做的是在运行单元测试时动态创建表单。实际表单将仅用作进度条。我的单元测试使用Selenium库来测试网站,最好有一些进度条。我试着在测试中创建新的表单,但是当测试在执行时,表单就挂在那里。谢谢 [TestMethod] public void test1() { using(Form1 form=new Form1()) { form.Show(); form.RunAsync();

我想做的是在运行单元测试时动态创建表单。实际表单将仅用作进度条。我的单元测试使用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);
    }
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此代码正是这样做的。您可以将代码替换为如果你不想显示代码的其余部分,或者你可以搜索代码中没有处理的事件,这本身就是一个有效的代码。但是如果你试图在单元测试中创建这个表单,它就会冻结。也许我做错了什么。