gpt4 book ai didi

c# - 防止 TestInitialize 为一个 TestMethod 方法运行

转载 作者:太空狗 更新时间:2023-10-29 22:36:01 25 4
gpt4 key购买 nike

我有一组需要 TestInitialize 的单元测试为他们工作而奔跑……但是,我希望能够在不运行的情况下运行一项特定测试TestInitialize .有办法吗?

它可能看起来像这样:

[TestClass]
public class BingBangBoom
{
[TestInitialize]
public void Setup()
{
// ...
}

[TestMethod]
public void Bing()
{
// ...
}

[TestMethod]
public void Bang()
{
// ...
}

[TestMethod(PreventInitialize)]
public void Boom
{
// ...
}
}

不用担心,我可以想出一个替代方案

编辑 - RE DavidG:

拥有这个似乎是一种耻辱:

[TestClass]
public class BingBangBoom
{
[TestInitialize]
public void Setup()
{
// ...
}

// 10 very related methods
}

[TestClass]
public class BingBangBoom2
{
// 1 method, even though it's entirely related to BingBangBoomin'
}

我猜是这样的。

最佳答案

这不是很明显,但肯定可行。

假设你有这样的属性:

public class SkipInitializeAttribute : Attribute { }

您需要的是您的测试类中的公共(public)属性,以便由测试框架注入(inject):

public TestContext TestContext { get; set; }

然后像这样分支你的初始化:

[TestInitialize]
public void Initialize()
{
bool skipInitialize = GetType().GetMethod(TestContext.TestName)
.GetCustomAttributes<SkipInitializeAttribute>().Any();

if (!skipInitialize)
{
// Initialization code here
}
}

作为自测解决方案的工作样本:

using System;
using System.Linq;
using System.Reflection;

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTestProject1
{
public class SkipInitializeAttribute : Attribute
{
}

[TestClass]
public class UnitTest1
{
public TestContext TestContext { get; set; }

private bool IsInitializationDone { get; set; }

[TestInitialize]
public void Initialize()
{
bool skipInitialize = GetType().GetMethod(TestContext.TestName).GetCustomAttributes<SkipInitializeAttribute>().Any();

if (!skipInitialize)
{
// Initialization code here
IsInitializationDone = true;
}
}

[TestMethod]
public void TestMethod1()
{
Assert.IsTrue(IsInitializationDone);
}

[TestMethod]
[SkipInitialize]
public void TestMethod2()
{
Assert.IsFalse(IsInitializationDone);
}

[TestMethod]
public void TestMethod3()
{
Assert.IsTrue(IsInitializationDone);
}
}
}

和结果:

Starting test execution, please wait...
Passed TestMethod1
Passed TestMethod2
Passed TestMethod3

Total tests: 3. Passed: 3. Failed: 0. Skipped: 0.
Test Run Successful.

考虑到这个总体思路,您可以使用基类/助手等。

关于c# - 防止 TestInitialize 为一个 TestMethod 方法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42813531/

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