gpt4 book ai didi

c# - 如何在 MSTest 的测试执行期间添加非测试方法作为测试?

转载 作者:太空宇宙 更新时间:2023-11-03 12:48:49 27 4
gpt4 key购买 nike

我有以下设置来并行运行我的测试(对于 Selenium 测试):

[TestClass]
public class ParallelTests
{
[TestMethod]
public void TestAllParallel()
{
var testActions = Assembly.GetExecutingAssembly().GetTypes()
.Where(t =>
t.GetCustomAttribute<CompilerGeneratedAttribute>() == null &&
t.GetCustomAttribute<TestClassAttribute>() != null)
.Select(t => new Action(() => RunTest(t)))
.ToArray();

System.Threading.Tasks.Parallel.Invoke(testActions);
}

private static void RunTest(Type test)
{
var instance = Activator.CreateInstance(test);

ExecuteTestMethods(instance);
}

private static void ExecuteTestMethods(object instance)
{
var testMethods = instance.GetType().GetMethods()
.Where(m =>
m.GetCustomAttribute<TestMethodAttribute>(false) != null &&
m.GetCustomAttribute<IgnoreAttribute>(false) == null)
.ToArray();

foreach (var methodInfo in testMethods)
{
methodInfo.Invoke(instance, null);;
}
}
}

虽然我的 Jenkins 服务器上的测试结果报告只显示一个测试已经运行,但它工作正常。我想在报告中看到 TestAllParallel() 运行的所有测试。

这可能吗?我在想也许可以在运行时向 MSTest 添加一个方法作为测试。

最佳答案

恐怕无法添加方法,但您可以报告该特定测试中所有运行的结果。首先用类似于下面代码的东西包装测试方法的执行,这样你就可以保存运行结果:

    private static void ExecuteMethod(MethodInfo method, object instance)
{
try
{
method.Invoke(instance, null);
threadSafeStringBuilder.Append("Test: " + method.Name + " passed");
}
catch (UnitTestAssertException utException)
{
threadSafeStringBuilder.Append("Test: " + method.Name + " assertion failed" + utException.Message);
_allPassed = false;
}
catch (Exception ex)
{
threadSafeStringBuilder.Append("Test: " + method.Name + " exception: " + ex.Message");
}

}

稍后在 testAllParallel 中:

public void TestAllParallel()
{
//...
System.Threading.Tasks.Parallel.Invoke(testActions);
if(_allPassed){
Assert.IsTrue(true, "All tests Passed:\n"+threadSafeStringBuilder.ToString());
}else{
Assert.Fail("Some tests failed:\n"+threadSafeStringBuilder.ToString());
}

)

请记住,这只是一个想法,并非完全有效的代码。特别是 .net 中没有 ThreadSafeStringBuilder,因此您可能需要自己实现或使用一些库。

关于c# - 如何在 MSTest 的测试执行期间添加非测试方法作为测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36332441/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com