我试图通过实际访问数据库来测试我的真实数据。我实际上正在测试我的Repository类。这是我正在做的一个例子;
/// <summary>
/// Summary description for Country
/// </summary>
[TestClass]
public class Country {
public Country() {
_countryRepo = new CountryRepository();
}
private ICountryRepository _countryRepo;
[TestMethod]
public void db_should_return_at_least_one_country_as_approved_all() {
//Act
var model = _countryRepo.GetAll();
//Assert
Assert.IsTrue(model.Count() >= 1);
}
[TestMethod]
public void db_should_return_at_least_one_country_as_approved_true() {
//Act
var model = _countryRepo.GetAll(ApprovalStatus.Approved);
//Assert
Assert.IsTrue(model.Count() >= 1);
}
[TestMethod]
public void db_should_return_Turkey_as_country_name_by_id() {
//Act
var model = _countryRepo.GetSingle(1000);
//Assert
Assert.AreEqual<string>("Turkey", model.CountryName);
}
[TestMethod]
public void db_should_return_Turkey_as_country_name_by_countryISO3166Code() {
//Act
var model = _countryRepo.GetSingle("TR");
//Assert
Assert.AreEqual<string>("Turkey", model.CountryName);
}
[TestMethod]
public void db_should_return_Turkey_as_country_name_by_GUID() {
//Act
var model = _countryRepo.GetSingle(Guid.Parse("9AF174A6-D0F7-4393-AAAD-B168BADEDB30"));
//Assert
Assert.AreEqual<string>("Turkey", model.CountryName);
}
}
这对我的需求很有效,但想知道我是否正在按照本书做到这一点。我真的应该遵循其他任何模式。我不想伪造我的数据,我真正强烈的是测试我的DAL和真实的生产数据。
答案 0 :(得分:2)
如果其他人(甚至您)访问您的数据库并创建新的已批准国家/地区或更改您的国家/地区名称,您的测试将会失败。你会想:&#34;我的存储库WTH错了,为什么它没有按预期工作?&#34;但是,问题不在于存储库。
当我编写打到数据库的测试时,我喜欢创建数据库并在启动时加载默认值并在之后立即销毁。我不确定这是否是最好的选择,但效果还不错。这种方法的问题在于速度较慢,而且代码更多。
答案 1 :(得分:0)
对于手头的要求,即真正静态且不应被篡改的数据,我认为这是一种有效的方法。
我建议写data-driven tests,而不是为每个国家重复相同的测试用例。
答案 2 :(得分:0)
您应该仅使用静态数据库进行测试,并且测试GetAll
的方法应该根据实际预期计数进行断言。如果你断言它至少返回了一条记录,你怎么知道它真的返回了你的预期?您甚至应该通过结果集并测试所有记录是否满足条件(但它通常用于更复杂的条件)。