使用C#4.0。我有一个单元测试,我需要创建一个临时数据库。这是在类初始化期间完成的:
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
{
// Create database!
}
[ClassCleanup()]
public static void MyClassCleanup()
{
// Remove database IF CurrentTestOutcome == UnitTestOutcome.Passed
}
问:如何阅读CurrentTestOutcome
方法中的ClassCleanup
值?
答案 0 :(得分:3)
我建议您创建一个静态标志,您可以从MyClassCleanup
访问该标志,并在出现错误时在测试清理期间设置它。您班上的内容如下:
[TestClass]
public class MyTests {
static bool _testFailed;
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
{
// Create database!
_testFailed = false;
}
[ClassCleanup()]
public static void MyClassCleanup()
{
if(_testFailed == false) {
// Remove database IF CurrentTestOutcome == UnitTestOutcome.Passed
}
}
[TestCleanup()]
public void MyTestCleanup() {
if (TestContext.CurrentTestOutcome != UnitTestOutcome.Passed) {
_testFailed = true;
}
}
public TestContext TestContext { get; set; }
}
我建议采用上述方法,因为我的理解是,在你的课堂清理中,引用CurrentTestOutcome
从那时起就不会有太大的影响。它只包含要运行的最后一个测试的状态,而不是该类中所有测试的综合结果。
答案 1 :(得分:1)
我正在考虑以下解决方案。不确定这是否被视为良好做法。
private static IList<TestContext> testResults;
public TestContext TestContext
{
get
{
return testContext;
}
set
{
testContext = value;
testResults.Add(testContext);
}
}
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
{
testResults = new List<TestContext>();
}
[ClassCleanup()]
public static void MyClassCleanup()
{
if (testResults.All(t => t.CurrentTestOutcome == UnitTestOutcome.Passed ||
t.CurrentTestOutcome == UnitTestOutcome.Inconclusive))
{
// Perform conditional cleanup!
}
}