【发布时间】:2016-10-18 03:31:40
【问题描述】:
我正在使用 Visual Studio 的测试工具进行单元测试。我需要一些初始化代码来运行在每次测试之前。
我有一个用于初始化代码的Setup 类。我已经使用[AssemblyInitialize]在每次测试运行之前添加了要运行的代码,但我不知道如何在单个测试的基础上执行相同的操作。
我尝试使用[TestInitialize] 属性,但这仅适用于与[TestInitialize] 方法在同一文件中的测试。我希望初始化代码为程序集中的所有测试自动运行,而不必在每个测试文件中显式调用它。
[TestClass]
public class Setup
{
[AssemblyInitialize]
public static void InitializeTestRun(TestContext context)
{
//... code that runs before each test run
}
[TestInitialize] //this doesn't work!
public static void InitializeTest()
{
//... code that runs before each test
}
}
【问题讨论】:
-
没有对每个测试运行的
AssemblyInitialize等效项。我认为您必须将所有类都建立在一个公共基类上才能做到这一点。初始化时需要做什么?可能还有其他方法。 -
基本上我通过使用内存数据库集来模拟实体框架上下文,以避免实际调用真实数据库。我想为每个测试创建一个新的上下文实例,即一个干净、空的“db”,这样测试就不会相互干扰。
-
我不确定是否有一种干净的方法可以做到这一点,您的所有测试文件可能都必须有自己的
TestInitialize方法来调用数据库初始化。 -
对 MSTest 了解不够,但以下应该可以工作(至少它可以与其他测试框架一起工作):使用 TestInitialize 方法创建一个基类 DatabaseIntegrationTests。从该基类派生您的其他测试类。
-
@tobsen 如果您将您的评论转换为答案,我会接受它
标签: c# visual-studio unit-testing visualstudio.testtools