如何在Visual Studio 2013中为多个sql单元测试编写"预测试"?

Nom*_*cio 3 sql sql-server unit-testing visual-studio

目前,sql单元测试由5个部分组成:

- Pre-Initialise
- Pre-Test
- Test
- Post-Test
- Post-Cleanup
Run Code Online (Sandbox Code Playgroud)

对于我的一些测试,"预测试"部分是相同的,我必须多次复制粘贴预测试代码,代码重复是一个坏主意...所以我的问题是,如果有任何方法写预测试只在一个地方通过调用单元测试项目中的函数来运行它?

我当前的C#文件示例在我的测试用例后面:

[TestClass()]
public class SqlServerUnitTestAssignUserToAssignment : SqlDatabaseTestClass
{
  private TransactionScope trans;

  public SqlServerUnitTestAssignUserToAssignment()
  {
    InitializeComponent();
  }

  [TestInitialize()]
  public void TestInitialize()
  {
    trans = new TransactionScope();
    base.InitializeTest();
  }
  [TestCleanup()]
  public void TestCleanup()
  {
    base.CleanupTest();
    trans.Dispose();
  }

  // generated code below:

  Designer support code

  Additional test attributes

  [TestMethod()]
  public void core_AssignUserToAssignmentTest()...

  private Sql DatabaseTestActions core_AssignUserToAssignmentTestData
}
Run Code Online (Sandbox Code Playgroud)

Cha*_*had 5

拼图的两个部分是:

  • 每个类"Common Scripts":如果您需要在给定测试类中的所有测试之前或之后运行公共代码,只需使用Designer将SQL放入该类的Common Scripts中.

  • 基类测试初始值设定项:如果需要在给定项目(或解决方案)中的所有测试之前或之后运行公共代码,请创建一个新的基类,并使每个测试类派生自它.

-

public class MySqlTestsBase : SqlDatabaseTestClass
{
    [TestInitialize]
    public void TestInitialize()
    {
        PrivilegedContext = TestService.OpenPrivilegedContext();

        CleanupTables();

        //"Common Scripts" are run
        base.InitializeTest(); 
    }

    [TestCleanup]
    public void TestCleanup()
    {
        CleanupTables();

        base.CleanupTest();
    }

    /// <summary>
    /// Deletes data from all tables that tests might have affected.
    /// </summary>
    private void CleanupTables()
    {
        TestService.Execute(PrivilegedContext, PrivilegedContext, new SqlDatabaseTestAction
        {
            SqlScript = @"
                DELETE CustomerOrder
                DELETE Customer
                DELETE Order
            "
        });
    }
}
Run Code Online (Sandbox Code Playgroud)