SQL Server单元测试中的Test Initialize脚本在每个测试方法之前运行 和测试每种测试方法后清理运行。
所以例如我有这个结构
UnitTests -- Main Project
- FooSchema -- Test Class
- SprocFoo1 -- Individual Unit Tests / Test Methods
- SprocFoo2
- BarSchema
- SprocBar1
- SprocBar2
这样的测试运行
-- Test Initialiaze for TestClass FooSchema
-- Pre-Test -- for SprocFoo1
-- Test -- for SprocFoo1
-- Post-Test -- for SprocFoo1
-- Pre-Test -- for SprocFoo2
-- Test -- for SprocFoo2
-- Post-Test -- for SprocFoo2
-- Test Cleanup for TestClass FooSchema
-- Test Initialiaze for TestClass BarSchema
-- Pre-Test -- for SprocBar1
-- Test -- for SprocBar1
-- Post-Test -- for SprocBar1
-- Pre-Test -- for SprocBar2
-- Test -- for SprocBar2
-- Post-Test -- for SprocBar2
-- Test Cleanup for TestClass BarSchema
我怎样才能添加一个在项目开始时运行的脚本,以及一个将在项目最后运行的脚本?
所以它会像这样运行
-- Pre MasterUnitTest
-- Test Initialiaze for TestClass FooSchema
-- Pre-Test -- for SprocFoo1
-- Test -- for SprocFoo1
-- Post-Test -- for SprocFoo1
-- Pre-Test -- for SprocFoo2
-- Test -- for SprocFoo2
-- Post-Test -- for SprocFoo2
-- Test Cleanup for TestClass FooSchema
-- Test Initialiaze for TestClass BarSchema
-- Pre-Test -- for SprocBar1
-- Test -- for SprocBar1
-- Post-Test -- for SprocBar1
-- Pre-Test -- for SprocBar2
-- Test -- for SprocBar2
-- Post-Test -- for SprocBar2
-- Test Cleanup for TestClass BarSchema
-- Post MasterUnitTest
答案 0 :(得分:2)
Visual Studio设计人员生成的SQL数据库单元测试实际上是常见的MSUnit测试类。
如果要执行某些设置(Pre MasterUnitTest)和拆卸(Post MasterUnitTest)逻辑,您可以重新构建由Visual Studio生成的测试,并将它们嵌套在将运行设置和拆除逻辑的类中。这是一个例子:
[TestClass]
public class NestedUnitTests
{
[ClassInitialize()]
public static void ClassInit(TestContext context) {
Debug.WriteLine("Init before all individual Test Classes");
}
[TestMethod]
public void Init()
{ }
[TestClass]
public class NestedFooSchemaTestClass
{
[TestMethod]
public void Test1InClass()
{
Debug.WriteLine("Test Class Foo Schema - Method 1");
Assert.AreEqual(true, true);
}
}
[TestClass]
public class NestedBarSchemaTestClass
{
[TestMethod]
public void Test2InClass()
{
Debug.WriteLine("Test Class Foo Bar - Method 2");
Assert.AreEqual(true, true);
}
}
[ClassCleanup()]
public static void ClassCleanup() {
Debug.WriteLine("Clean after all Test Classes executed");
}
}
当我使用TestRunner运行时,我得到:
Init before all individual Test Classes
Test Class Foo Schema - Method 1
Test Class Foo Bar - Method 2
Clean after all Test Classes executed
注意:使用此方法唯一无法实现的是在另一个类初始化之前执行类清理(例如,在类的初始化之前对类的Foo进行类清理)。所有类的测试清理将在最后运行。这是因为测试类在所有测试完成运行后由运行时批量卸载,这是故意的,因为测试应该是隔离。
如果要完全控制执行,另一种方法是通过使用MSTest命令行utitilites的自定义脚本运行测试。这样你就可以运行一个预脚本(或预测试),然后是你的主要测试dll,最后是一个Post-script(或后测试)。
这是一个链接,其中包含有关如何从命令行使用MSTest的更多信息:
答案 1 :(得分:1)
没有理由运行特殊的主前/后测试 - 您可以尝试实现它创建有序测试:
“您可以使用有序测试以特定顺序运行SQL Server单元测试。有关详细信息,请参阅如何:创建有序测试(Visual Studio 2012)。 {{3 }}“