gpt4 book ai didi

c# - 如何在单元测试类的 [ClassInitialize()] 中写入输出?

转载 作者:可可西里 更新时间:2023-11-01 09:00:38 24 4
gpt4 key购买 nike

我正在为我的 C#.NET 应用程序的持久层编写一些单元测试。在测试类的测试执行之前和之后,我想做一些清理以清除可能插入的虚拟值,因此,这种清理发生在标有属性 [ClassInitialize( )][ClassCleanup()]

(我知道更好的方法是使用内存数据库,但就我们依赖大量存储过程而言,这并不是真正可行的....)

我想输出一些关于清理结果的信息,但我找不到在 VISUAL Studio 2010 测试结果中获取输出的方法。

这就是我目前所做的:

        ///... lots of stuff before ...

//global for the test run
private static TestContext context;

//for each test
private IRepository repo;

#region Initialisation and cleanup

/// <summary>
/// Execute once before the test-suite
/// </summary>
[ClassInitialize()]
public static void InitTestSuite(TestContext testContext)
{
context = testContext;
removeTestDataFromDb();
}

[ClassCleanup()]
public static void CleanupTestSuite()
{
removeTestDataFromDb();
}

private static void removeTestDataFromDb()
{
context.WriteLine("removeTestDataFromDb starting");
using (ISession session = NHibernateHelper.OpenSession())
{
IDbConnection cn = session.Connection;
IDbCommand cmd = cn.CreateCommand();
//remove anyt test data
cmd.CommandText = @"DELETE FROM SomeTable
WHERE somefield LIKE 'easyToFindTestData%Test'";
int res = cmd.ExecuteNonQuery();
context.WriteLine("removeTestDataFromDb done - affected {0} rows", res);
}
}


[TestInitialize()]
public void InitTest()
{
repo = new MyRepositoryImplementation();
}

[TestCleanup()]
public void CleanupTest()
{
//cleanup
repo = null;
}

#endregion

我正在尝试使用 context.WriteLine() ...

我也尝试过使用 Console.WriteLine() 得到相同的结果。

如何在 ClassInitialize 部分写入标准输出,您可以在哪里访问该输出?

最佳答案

[ClassInitialize][ClassCleanup] 只为该类中的所有测试运行一次。您最好使用在每次测试前后运行的 [TestInitialize][TestCleanUp]。还可以尝试将完整的测试包装在数据库事务中。通过这种方式,您可以简单地回滚操作(通过不提交事务)并且您的数据库保持一致状态(这对于可信赖的自动化测试至关重要)。

我为集成测试做的一个技巧是定义一个基类,我的所有集成测试类都可以从该基类继承。基类确保每个测试都在一个事务中运行并且该事务被回滚。这是代码:

public abstract class IntegrationTestBase
{
private TransactionScope scope;

[TestInitialize]
public void TestInitialize()
{
scope = new TransactionScope();
}

[TestCleanup]
public void TestCleanup()
{
scope.Dispose();
}
}

祝你好运。

关于c# - 如何在单元测试类的 [ClassInitialize()] 中写入输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4374353/

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