我使用单元测试已经有一段时间了。但现在我需要编写集成测试。我应该将一些东西保存到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;
}但我不知道这是否好办法?你有什么意见建议?
发布于 2015-07-30 08:34:52
您应该一次测试一段集成,并使DB处于可以运行多个测试的状态,并且它们不应该相互影响。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;
}
}发布于 2015-07-30 08:20:01
当您使用一个真正的数据库时,您应该在每次尝试测试之后清理它。
如何访问数据也不是很清楚,如何证明,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();
...
}
}https://stackoverflow.com/questions/31718288
复制相似问题