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

时间:2017-08-29 15:12:26

标签: c# testing automated-tests continuous-deployment

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

上下文: 我对这一切都很陌生,但试图制定持续的部署策略。我想在发布过程中/之后在解决方案中查找并运行所有测试。 这些不是构建相关的单元测试,这些是端到端解决方案测试的一部分。

如果我的想法偏离了正确的轨道,请告诉我。

2 个答案:

答案 0 :(得分:3)

因此,如果你想要一个只使用TestAttribute收集方法的工具,Visual Studio就会内置它。它是Test Explorer,它检查解决方案中的程序集并根据属性挖掘出测试,然后让你运行它们。它在VS的某些版本中可用(我使用Professional,它有它);不过,我不确定究竟应该做些什么。

通常为此目的编写的应用程序是可行的。但是,您可以自己扫描程序集以获取这些属性。这里没有必要 - 正如我所说,这里有测试工具可以做到这一点,像VSTS这样的东西可以帮助你集成到部署过程中 - 但是既然你提到你是所有这一切的新手我会将它留在这里作为您将来可能需要或不需要使用的东西。如果不出意外,您可以将其改编为其他内容。

基本上,您可以使用Reflection来获取程序集,类,方法等,并且可以获得装饰每个程序集的属性。你这样做:

[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为您提供了一些链接。我在这里介绍的是很长的路要走,并且需要你编写自己的工具,这对那些东西来说是不必要的。但是反射是一种方便的技术,这可能是有用的,比如,在测试工具之外生成一个报告,列出你的测试方法/类或其他东西。

答案 1 :(得分:0)

您打算使用哪种技术?我不确定我是否理解您的请求,但如果您打算使用.NET Unit测试,可以查看此处:https://docs.microsoft.com/en-us/visualstudio/test/getting-started-with-unit-testing

或者你也可以使用着名的NUnit,https://stackoverflow.com/questions/43007761/how-to-run-nunit-tests-in-visual-studio-2017