C# 如何将XUnit与Visual studio结合使用,对远程进程中运行的代码进行单元测试

C# 如何将XUnit与Visual studio结合使用,对远程进程中运行的代码进行单元测试,c#,unit-testing,visual-studio-2015,resharper,solidworks,C#,Unit Testing,Visual Studio 2015,Resharper,Solidworks,我们正在为CAD系统编写插件。编写外接程序涉及编译DLL、注册DLL,然后启动solidworks。dll中的代码可以配置为在solidworks启动时立即执行 我想做的是创建一个特殊的DLL,以便它从VisualStudio运行一系列单元测试或单个单元测试,并以标准方式将结果报告给VisualStudio 我们很乐意使用标准的VisualStudio测试或resharper测试系统 是否可以为单元测试系统编写一个扩展来实现这一点。如果是这样,实现这一目标有多困难。也许有一些扩展已经为其他需要测

我们正在为CAD系统编写插件。编写外接程序涉及编译DLL、注册DLL,然后启动solidworks。dll中的代码可以配置为在solidworks启动时立即执行

我想做的是创建一个特殊的DLL,以便它从VisualStudio运行一系列单元测试或单个单元测试,并以标准方式将结果报告给VisualStudio

我们很乐意使用标准的VisualStudio测试或resharper测试系统


是否可以为单元测试系统编写一个扩展来实现这一点。如果是这样,实现这一目标有多困难。也许有一些扩展已经为其他需要测试的插件类型环境做了类似的事情。

我们为XUnit编写了一个插件来解决这个问题

使用上述方法的一个具体解决方案是对solidworks进行单元测试

带有示例自定义事实的示例测试

namespace XUnitRemote.Test
{
    public class Tests
    {
        private readonly ITestOutputHelper _Output;

        public Tests(ITestOutputHelper output)
        {
            _Output = output;
        }

        [SampleProcessFact]
        public void OutOfProcess()
        {
            _Output.WriteLine("Process name: " + Process.GetCurrentProcess().ProcessName);
            Assert.Equal(5, 3);
        }

        [Fact]
        public void InProcess()
        {
            _Output.WriteLine("Process name: " + Process.GetCurrentProcess().ProcessName);
            Assert.Equal(5, 3);
        }
    }
}

对于您的自定义过程,您需要编写一些钩子,因此请查看项目以获得如何执行此操作的详细信息。

测试solidworks加载项可能会非常痛苦……当我测试solidworks加载项代码时,我发现封送.GetActiveObject(“solidworks.Application”)非常容易要获取sldworks对象,然后只需运行我的代码即可。我认为这可以合并到UnitTest中,因此您基本上是在模拟solidworks,而不必编译和重新打包dll并等待sldwrks启动。我忘了我问过这个问题。我们几乎已经完成了对xunit的扩展,以允许真正的进程内单元测试。它将包括一个包含WCF服务的solidworks加载项。WCF服务是我们编写的xunit扩展的一部分。最后,这个过程是完全透明的,单元测试甚至可以调试。希望我们能在周一完成,我们会发布它。状态调优。进程外的xunit测试部分已经基本就绪。你可以在这里看到这个。我们还将为此创建一个特定于solidworks的扩展。我们仍然无法让它与solidworks一起工作。Solidworks在应用程序域中做一些古怪的事情,奇怪的坏事情发生了。原理是正确的,但仍然需要一些工作。你在做手动测试吗?你在写什么样的插件?欢迎您查看我的:不,我们正在进行自动测试,但我们发现,当进程用完时,COM调用非常慢。新框架将在进程中运行,速度应该更快。solidworks的addin框架和testframework现在运行良好,可以使用。让我知道它是否对您有用。这需要一些工作,但我们现在在进程中调度测试,并在正确的线程上运行,因此COM的开销非常小。在进程外运行20秒的测试现在在进程内运行不到一秒。:)