如何对没有删除操作的服务进行自动集成测试,并在每次运行c#时重用相同的数据

时间:2013-07-24 22:52:22

标签: c# automation mstest

我有一个WCF服务(仅限创建,检索和更新操作),这是一个ESB服务,其设计使得不会对数据进行验证,这意味着可以一次又一次地传递相同的数据,或者您可以通过在空白数据中留下一个必填字段。

我需要在每次运行时使用相同的数据对所有三个操作进行集成测试。

检索和更新可以自动化,因为我可以多次检索相同的数据并进行更新。

但是我如何自动化创建操作?我可以在每次运行时创建相同的记录,但检索不知道从数据库中检索哪些数据,因为它有多行相同的数据,而且我不想用相同的记录填充数据库。

我知道这看起来很愚蠢,但这是现实。任何建议和帮助真的很感激。

注意:我有正常的MSTest

2 个答案:

答案 0 :(得分:0)

要处理测试数据问题,可以使用test cleanup属性或class cleanup属性,它们是在给定类或方法中的所有测试分别完成运行后立即调用的方法。您可以在清理方法中调用存储过程/查询来删除所有测试数据。而不是每个记录的不同GUID,使用清理SQL可用于识别虚拟数据的其他ID ...

[TestClass()]
public sealed class MyClassTest
{

    [ClassCleanup()]
    public static void ClassCleanup()
    {
        // This method is called after all of the test methods in this
        // test class have finished running...call a cleanup stored procedure
    } 


    [TestMethod()]
    public void MyMethodTest()
    {
        // This is where you perform your test
    }
}

Microsoft文档:http://msdn.microsoft.com/en-us/library/ms243147%28v=vs.80%29.aspx

答案 1 :(得分:0)

System Under Test 必须在测试开始之前具有预定义的已知状态,并且每个测试必须在完成后将系统返回到该状态。

这意味着每次测试调用Create或任何其他方法时,必须使用Cleanup方法从数据库中删除记录。测试必须是独立的。

我知道Create方法可能会在许多表中添加记录,但这很难做到。一个简单的(?)方法是在Initialize方法中重新部署数据库,或者在Initialize的db的take a snapshot重新部署数据库,并将数据库返回到{ {1}}。