我开始了实习,我的工作包括为一些项目设置单元测试。
我已经实现了几十个测试,现在我想创建一个机制,在每次运行之后或之前恢复原始数据库。
我有必要的脚本来创建、填充和删除我的数据库,但我不想在每个测试类中调用这个机制,而是只调用一次。
当我开始一个或所有测试时,是否可以创建一个ClassIniatialize()
只被调用一次的对象?
编辑
我/你需要的只是使用AssemblyInitialize()和AssemblyCleanUp()并且一切都已解决,;)
我开始了实习,我的工作包括为一些项目设置单元测试。
我已经实现了几十个测试,现在我想创建一个机制,在每次运行之后或之前恢复原始数据库。
我有必要的脚本来创建、填充和删除我的数据库,但我不想在每个测试类中调用这个机制,而是只调用一次。
当我开始一个或所有测试时,是否可以创建一个ClassIniatialize()
只被调用一次的对象?
编辑
我/你需要的只是使用AssemblyInitialize()和AssemblyCleanUp()并且一切都已解决,;)
我/你需要的只是使用AssemblyInitialize()和AssemblyCleanUp()并且一切都已解决,;)
您可以在 上启动事务TestInitialize
并回滚TestCleanup
。这种方法将允许您避免在单个测试范围之外进行数据更改。
[TestInitialize()]
public void Initialize()
{
//Init DB Transaction
}
[TestCleanup()]
public void Cleanup()
{
//Rollback DB Transaction, database returns to the initial state
}
您需要有一个先前填充的测试数据库来运行测试。
附带说明一下,应该在集成测试而不是单元测试中测试数据库访问。添加外部依赖项违反单元测试定义。
还要检查在内存中使用SQLite的可能性,这将更适合于测试生产数据库引擎的数据库访问。
您可以创建一个基类并使用 ClassInitialize 属性在该基类中装饰一个方法。
之后,您只需要确保您的所有测试类都继承自这个基类。
ClassInitilize 方法将为您拥有的每个测试类调用一次。例如,您可以在基本测试类中只实现一次它,但仍然会为每个测试类调用一次。