Jim*_*988 5 c# attributes unit-testing
我有一套单元测试需要TestInitialize运行才能运行...但是,有一个特定的测试,我希望能够在不运行的情况下运行TestInitialize.有没有办法做到这一点?
它可能看起来像这样:
[TestClass]
public class BingBangBoom
{
[TestInitialize]
public void Setup()
{
// ...
}
[TestMethod]
public void Bing()
{
// ...
}
[TestMethod]
public void Bang()
{
// ...
}
[TestMethod(PreventInitialize)]
public void Boom
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
不用担心,如果没有,我可以提出替代解决方案
编辑 - 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'
}
Run Code Online (Sandbox Code Playgroud)
我想这就是它.
这不是很明显,但肯定是可行的.
假设你有这样的属性:
public class SkipInitializeAttribute : Attribute { }
Run Code Online (Sandbox Code Playgroud)
您需要的是测试类中的公共属性,以便通过测试框架注入:
public TestContext TestContext { get; set; }
Run Code Online (Sandbox Code Playgroud)
然后像这样分支你的初始化:
[TestInitialize]
public void Initialize()
{
bool skipInitialize = GetType().GetMethod(TestContext.TestName)
.GetCustomAttributes<SkipInitializeAttribute>().Any();
if (!skipInitialize)
{
// Initialization code here
}
}
Run Code Online (Sandbox Code Playgroud)
工作样本作为自我测试的解决方案:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
Starting test execution, please wait...
Passed TestMethod1
Passed TestMethod2
Passed TestMethod3
Total tests: 3. Passed: 3. Failed: 0. Skipped: 0.
Test Run Successful.
Run Code Online (Sandbox Code Playgroud)
记住这个一般的想法,你可以玩基类/助手等.
| 归档时间: |
|
| 查看次数: |
1253 次 |
| 最近记录: |