在TestCleanup中获取TestResult mstest C#

时间:2019-06-14 13:58:16

标签: c# selenium mstest test-results

我想在TestCleanup()中使用TestResult获取有关测试的一些信息。 但是我不知道如何初始化TestResult对象并获取它。 我想要与TestContext对象相同的行为。

谢谢

    private static TestContext _testContext;
    [ClassInitialize]
    public static void SetupTests(TestContext testContext)
    {
        _testContext = testContext;
    }

编辑: 因此,如果我无法在TestCleanup中访问TestResult,如何在所有测试完成后将所有测试结果写入csv文件?

2 个答案:

答案 0 :(得分:1)

您无法访问super.viewDidLoad()中的TestResult对象,因为该对象在此阶段尚不存在。测试执行期间,在TestCleanupTestCleanup中花费的时间将合并到TestInitialize属性中。您可以通过添加类似以下内容来轻松对其进行测试:

TestResult.Duration

在快速执行的[TestCleanup] public void TestCleanup() { Thread.Sleep(1000); } 中。或者,您可以在TestMethod上检查Invoke方法:https://github.com/microsoft/testfx/blob/167533cadfd2839641fc238d39ad2e86b4262be1/src/Adapter/MSTest.CoreAdapter/Execution/TestMethodInfo.cs#L127

此方法将运行您的测试。您可以看到放置TestMethodInfowatch.Start()的位置,以及执行watch.Stop()方法的位置。此方法将在ExecuteInternalRunTestInitializeMethod之间运行RunTestCleanupMethodStart

您唯一的解决方案是合并测试类中的所有TestResult,然后在ClassCleanup方法中访问它们。

您可以通过实现自己的Stop并重写TestMethodAttribute方法来做到这一点。然后,您可以将所有结果保存在静态属性中-Execute类中的Results-并通过TestResultCollection方法进行访问。这是一个小例子:

TestCleanup

请记住,这更像是黑客,而不是适当的解决方案。最好的选择是实现自己的csv记录器,并通过using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Collections.Generic; namespace UnitTestProject { [TestClass] public class UnitTest { [ClassCleanup] public static void ClassCleanUp() { // Save TestResultCollection.Results in csv file } [MyTestMethod] public void TestMethod() { Assert.IsTrue(true); } } public static class TestResultCollection { public static Dictionary<ITestMethod, TestResult[]> Results { get; set; } = new Dictionary<ITestMethod, TestResult[]>(); } public class MyTestMethodAttribute : TestMethodAttribute { public override TestResult[] Execute(ITestMethod testMethod) { TestResult[] results = base.Execute(testMethod); TestResultCollection.Results.Add(testMethod, results); return results; } } } 开关与vstest.console.exe一起运行。

答案 1 :(得分:0)