C#在解决方案中查找所有测试

C#在解决方案中查找所有测试,c#,testing,automated-tests,continuous-deployment,C#,Testing,Automated Tests,Continuous Deployment,我是否可以使用任何技术来查找解决方案中注释为测试的所有测试([TestMethod],[Fact],[Theory]) 背景: 我对这一切都很陌生,但我正试图制定一个持续部署战略。我希望在发布过程中/之后查找并运行解决方案中的所有测试。 这些不是依赖于构建的单元测试,而是端到端解决方案测试的一部分 请告诉我我的想法是否偏离了正确的轨道。您将使用哪种技术?我不太清楚您的要求,但如果您计划使用.NET单元测试,可以在此处查看: 或者您也可以使用著名的NUnit,因此,如果您想要一个只收集带有Test

我是否可以使用任何技术来查找解决方案中注释为测试的所有测试(
[TestMethod]
[Fact]
[Theory]

背景: 我对这一切都很陌生,但我正试图制定一个持续部署战略。我希望在发布过程中/之后查找并运行解决方案中的所有测试。 这些不是依赖于构建的单元测试,而是端到端解决方案测试的一部分


请告诉我我的想法是否偏离了正确的轨道。

您将使用哪种技术?我不太清楚您的要求,但如果您计划使用.NET单元测试,可以在此处查看:


或者您也可以使用著名的NUnit,

因此,如果您想要一个只收集带有TestAttribute的方法的工具,VisualStudio内置了这个工具。它是测试资源管理器,它检查解决方案中的程序集,并根据属性挖掘测试,然后让您运行它们。它在VS的一些版本中可用(我使用Professional,它有);不过,我不确定到底是哪一种

通常,为这个目的编写的应用程序才是最好的选择。但是,您可以自己扫描程序集以查找这些属性。这里其实没有必要——正如我所说,这里有一些测试工具可以做到这一点,像VST这样的东西可以帮助您集成到部署过程中——但是既然您提到您对所有这些都是新手,我就把它作为您将来可能需要或不需要使用的东西留在这里。如果没有别的东西,你可以把它改成别的东西

基本上,您可以使用反射来获取程序集、类、方法等,并且可以获取装饰它们的属性。你会这样做:

[TestClass]
public class AttributeFinder
{
    [TestMethod]
    public void MyTestMethod()
    {
        // Do something
    }

    public static void FindAttributes()
    {
        var assembly = Assembly.GetAssembly(typeof(AttributeFinder));
        var types = assembly.GetTypes();
        foreach (var t in types)
        {
            var typeAttr = t.GetCustomAttribute(typeof(TestClassAttribute));
            if (typeAttr != null)
            {
                // Your class has a TestClass attribute on it!
            }

            var methods = t.GetMethods();
            foreach (var m in methods)
            {
                var methodAttr = m.GetCustomAttribute(typeof(TestMethodAttribute));
                if (methodAttr != null) 
                {
                    // This method has the TestMethod attribute!
                }
            }
        }
    }
}

同样,有一些工具可以自动为您执行此操作,QHero为您提供了一些链接。我在这里介绍的是一个漫长的过程,需要您编写自己的工具,而这对于那些东西来说是不必要的。但是,反射是一种很方便的技术,它可能有助于(比如)在测试工具之外生成一个报告,列出您的测试方法/类或其他内容。

Upvoted,您的答案很清楚(比我的答案清楚得多)我认为这对Pish很有帮助,因为我们不知道到底在寻找什么:)不确定我们是否需要标记这个问题顺便说一句。这正是我想要的谢谢。我对这一点的理解仍处于初级阶段。在这里,VSTS是我前进的方向。我想这将是一个漫长而有趣的旅程。谢谢