首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集成测试良好实践

集成测试良好实践
EN

Stack Overflow用户
提问于 2015-07-30 08:03:43
回答 2查看 2.7K关注 0票数 2

我使用单元测试已经有一段时间了。但现在我需要编写集成测试。我应该将一些东西保存到DB中,而不是检查保存的数据是否正常。我找不到简单、干净的集成测试示例。我的想法是这样做:

代码语言:javascript
复制
[Test]
public void IntegrationTestExample()
{
    // Arrange without mocking
    var objec1 = new objec1();
    var objec2 = new objec2();

    var startTestClass = new startTestClass(objec1, objec2);
    var saveData = "test data";

    //Act
    startTestClass.SaveToDB(saveData);

    // Assert
    var valueFromDB = SelectSavedData();
    Assert.AreEqual(saveData, valueFromDB);
}

//Get data from DB for assert
private string SelectSavedData() 
{
    var sqlQuery = "Select TOP 1 data from table1";                
    var data = RepositoryForTest.selectSavedData(sqlQuery);
    return data;
}

但我不知道这是否好办法?你有什么意见建议?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-30 08:34:52

您应该一次测试一段集成,并使DB处于可以运行多个测试的状态,并且它们不应该相互影响。MS测试框架允许您定义将在测试运行期间在特定时间设置和清理测试的方法,如下面的代码所示

代码语言:javascript
复制
[TestClass]
public class ReturnServiceTest {
    [ClassInitialize()]
    public static void ClassInit(TestContext context) {
        //INIT TEST DATA FOR THE CLASS
    }

    [TestCleanup]
    public void TestCleanup() {
        //CLEANUP DATA AFTER EACH TEST
    }

    [TestMethod]
    public void IntegrationTestExample() {
        // Arrange without mocking
        var objec1 = new objec1();
        var objec2 = new objec2();

        var startTestClass = new startTestClass(objec1, objec2);
        var saveData = "test data";

        //Act
        startTestClass.SaveToDB(saveData);

        // Assert
        var valueFromDB = SelectSavedData();
        Assert.AreEqual(saveData, valueFromDB);
    }

    //Get data from DB for assert
    private string SelectSavedData() {
        var sqlQuery = "Select TOP 1 data from table1";
        var data = RepositoryForTest.selectSavedData(sqlQuery);
        return data;
    }
}
票数 4
EN

Stack Overflow用户

发布于 2015-07-30 08:20:01

当您使用一个真正的数据库时,您应该在每次尝试测试之后清理它。

如何访问数据也不是很清楚,如何证明,RepositoryForTest不包含任何错误?尝试做最简单的事情,这对你的断言是可能的。

我对数据库的测试看起来像:

代码语言:javascript
复制
    public void Test()
    {
        try
        {
            // Fixture setup
            // Create and insert data into Database (with plain ADO code)

            // Exercise system


            // Verify outcome
            // use your data layer here
        }
        finally
        {
            // Teardown - other methods to clean the tables afterwards
            DatabaseHelper.ClearLookups();
            DatabaseHelper.ClearBeds();
            ...
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31718288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档