C# 使用主线程运行单元测试?

C# 使用主线程运行单元测试?,c#,.net,visual-studio-2017,C#,.net,Visual Studio 2017,因此,这个第三方创建了一个只在主线程上运行良好的方法(因为它使用了一些GUI功能) 这意味着为了测试它(以及其他需要它的方法),我需要能够从主线程运行它。 问题出在哪里?VisualStudio从辅助线程而不是主线程运行单元测试 所以。。。问题是:如何从单元测试中获取主线程并调用方法?您最好重写测试并删除ui功能调用。正在测试的GUI功能是什么?听起来这段代码与UI紧密耦合,为了对功能进行单元测试,需要纠正这种耦合。否则,您需要的是自动化的UI测试,而不是单元测试。代码不需要在“主”线程上运行,

因此,这个第三方创建了一个只在主线程上运行良好的方法(因为它使用了一些GUI功能)

这意味着为了测试它(以及其他需要它的方法),我需要能够从主线程运行它。 问题出在哪里?VisualStudio从辅助线程而不是主线程运行单元测试


所以。。。问题是:如何从单元测试中获取主线程并调用方法?

您最好重写测试并删除ui功能调用。正在测试的GUI功能是什么?听起来这段代码与UI紧密耦合,为了对功能进行单元测试,需要纠正这种耦合。否则,您需要的是自动化的UI测试,而不是单元测试。代码不需要在“主”线程上运行,它需要在UI线程上运行。这有很大的区别。为了进行测试,您可以在相关测试的初始化过程中构造一个消息循环,使线程成为UI线程。@David即使您测试的代码本身不操纵UI控件,在UI线程上运行测试通常也是很重要的。例如,如果测试需要确保UI在执行非UI工作时不被阻塞,那么您需要在调用测试之前实际设置一个消息循环,以确保它能够正确地继续发送消息。例如,许多人编写的异步非UI代码不正确,只有在非UI线程中运行时才能正常工作,因此,如果单元测试都在非UI线程中运行,您将无法捕捉到这一点。@ShanySamuelBenedictTopperI,这将取决于您使用的测试框架和编写代码的UI平台。