Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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
C# 有一个测试多个项目的单元测试项目_C#_Unit Testing_Design Patterns - Fatal编程技术网

C# 有一个测试多个项目的单元测试项目

C# 有一个测试多个项目的单元测试项目,c#,unit-testing,design-patterns,C#,Unit Testing,Design Patterns,我有3个项目。将它们称为项目A、B和C。这些项目具有非常相似的功能,尽管它们彼此无关。通过在互联网上的研究,我看到人们将他们的单元测试放在他们正在进行的项目上 让我解释一下为什么我发现创建一个测试所有项目的单元测试项目而不是3个单元测试项目很有帮助。 这是我正在使用的模式: [Test] public void TestFoo() { var filter = SystemType.ProjectA | SystemType.ProjectC; // Ne

我有3个项目。将它们称为项目A、B和C。这些项目具有非常相似的功能,尽管它们彼此无关。通过在互联网上的研究,我看到人们将他们的单元测试放在他们正在进行的项目上

让我解释一下为什么我发现创建一个测试所有项目的单元测试项目而不是3个单元测试项目很有帮助。

这是我正在使用的模式:

    [Test]
    public void TestFoo()
    {
        var filter = SystemType.ProjectA | SystemType.ProjectC; // Need to test this on projectA and ProjectB

        // linuxSystems are the computers where I perform the tests
        var linuxSystems = Globals.LinuxSystemsToTest();

        foreach (var ls in linuxSystems)
        {
            // do not test if flag is not precent
            if (filter.HasFlag(ls.SystemType) == false)
                return;

            ls.Connect();

            var output = ls.RunCommand("sudo cat /var/someFile");

            Assert.IsTrue(output.Contains("foo"));
            // perform test
        }
    }
如果我决定为每个项目创建一个单元测试项目(有3个),那么我必须创建两个调用相同基类的单元测试。此外,当添加新测试时,如果我需要在所有3个项目上进行测试,我将不得不打开3个项目,并在每个项目上添加测试,而不仅仅是让行
var filet=SystemType.ProjectA | SystemType.ProjectB | SystemType.ProjectC。有一个项目可以让我不必做这些


你们推荐的测试我的3个项目的最佳模式是什么?

如果这3个项目如此相似,为什么不将它们放在同一个解决方案中?另外,您共享的代码看起来不像是单元测试,而是功能测试。有一个功能测试项目是可以的。将一个单元测试项目用于多个互不依赖的项目是行不通的。这个stackoverflow问题将有助于解释单元测试和功能测试之间的区别。目前还不清楚过滤器和测试之间的关系。为什么过滤器是指A和C,而注释是指A和B?一个项目中的某些内容如何决定应该在另一个项目中测试哪些内容?您是否可以使用参数化测试或以其他方式指定应测试的内容,而不是过滤掉某些内容?例如,所有3个项目都必须测试是否安装了dotnet core@Scotthannen。您的测试代码和测试代码之间应始终保持一对一的关系。也就是说,假设您有一个
名称空间.Company.Product
项目;您应该有一个相应的
名称空间.Company.Product.Tests
项目。在其中,完全复制文件夹结构,并在末尾添加与单词
Tests
相同的类。这使得找到正确的文件非常容易,而且一切都是合乎逻辑的。如果您有任何仅用于测试目的的通用代码,请创建第四个库,并将其命名为
Company.TestUtilities
(或者更好的是,将其命名为nuget包)