gpt4 book ai didi

在基类中使用 TestInitialize/TestCleanup 进行 C# 单元测试

转载 作者:太空狗 更新时间:2023-10-30 00:10:10 25 4
gpt4 key购买 nike

我正在测试一个模块,其中每个测试类共享相同的行为:

  • 开始交易
  • 执行 SQL 查询
  • 回滚事务

我决定分别使用TestInitialize和TestCleanup来执行事务的Begin和Rollback。

直截了当的方法是在父类中编写 TestInitialize/TestCleanup,但这不适用于此测试框架。

为此解决方法是使用部分类。这种方法在我的案例中似乎可行,因为我的测试类主要是无状态的。事件不是理想的解决方案,它至少为我节省了一些复制/粘贴操作。

有人知道更好的方法吗?

这是部分类解决方案的示例:

在我的例子中,我分别测试了每个模块,对于这个例子,我将使用 Sales 模块:

SalesTest.cs 文件:

[TestClass]
public partial class SalesTest
{
[TestInitialize]
public void Setup()
{
//begin transaction
}

[TestCleanup]
public void Cleanup()
{
//rollback transaction
}
}

SalesTest.Order 文件:

public partial class SalesTest
{
[TestMethod]
public void SaveOrder_OnlyRequiredValuesFilled_SuccessfullySaved()
{
//Run some SQL queries
}
}

最佳答案

看起来您正在使用 Microsoft.VisualStudio.TestTools.UnitTesting 框架。我没有发现使用基类进行清理和初始化有任何问题。

例如

   [TestClass]
public class TestDemo : BaseTests
{
[TestMethod]
public void SaveOrder_OnlyRequiredValuesFilled_SuccessfullySaved()
{
//Run some SQL queries
}

}

[TestClass]
public abstract class BaseTests
{
[TestInitialize]
public void Setup()
{
Console.WriteLine("Setup executed.");
//begin transaction
}

[TestCleanup]
public void Cleanup()
{
Console.WriteLine("Cleanup executed.");
//rollback transaction
}
}

这会很好地工作,我可以将 BaseTest 继承到任何测试,并且 Intiailize 和 Cleanup 将在任何测试之前和之后执行。

关于在基类中使用 TestInitialize/TestCleanup 进行 C# 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32383023/

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