集成测试的好实践
本文关键字:集成测试 | 更新日期: 2023-09-27 18:05:42
我使用单元测试有一段时间了。但是现在我需要编写集成测试。我应该把一些东西保存到DB,然后检查保存的数据是否正确。我找不到简单明了的集成测试的例子。我的想法是这样做:
[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;
}
但我不确定这是否是一个好方法?你有什么建议吗?
您应该一次测试集成的一个部分,并使数据库处于可以运行多个测试并且它们不应该相互影响的状态。MS测试框架允许您定义在测试运行期间的特定时间设置和清除测试的方法,如下面的代码
所示[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;
}
}
当您使用一个真正的数据库时,您应该在每次测试尝试后清理它。
你如何访问数据也不是很清楚,什么证明,RepositoryForTest
不包含任何错误?尝试对您的断言执行最简单的操作。
我对数据库的测试如下:
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();
...
}
}