3

我开始了实习,我的工作包括为一些项目设置单元测试。

我已经实现了几十个测试,现在我想创建一个机制,在每次运行之后或之前恢复原始数据库。

我有必要的脚本来创建、填充和删除我的数据库,但我不想在每个测试类中调用这个机制,而是只调用一次。

当我开始一个或所有测试时,是否可以创建一个ClassIniatialize()只被调用一次的对象?

编辑

我/你需要的只是使用AssemblyInitialize()AssemblyCleanUp()并且一切都已解决,;)

4

4 回答 4

3

我/你需要的只是使用AssemblyInitialize()AssemblyCleanUp()并且一切都已解决,;)

于 2013-04-25T15:53:40.920 回答
1

您可以在 上启动事务TestInitialize并回滚TestCleanup。这种方法将允许您避免在单个测试范围之外进行数据更改。

  [TestInitialize()]
  public void Initialize()
  {
     //Init DB Transaction
  }

  [TestCleanup()]
  public void Cleanup()
  {
     //Rollback DB Transaction, database returns to the initial state
  }

您需要有一个先前填充的测试数据库来运行测试。

附带说明一下,应该在集成测试而不是单元测试中测试数据库访问。添加外部依赖项违反单元测试定义。

还要检查在内存中使用SQLite的可能性,这将更适合于测试生产数据库引擎的数据库访问。

于 2013-04-25T13:39:42.147 回答
0

您可以创建一个基类并使用 ClassInitialize 属性在该基类中装饰一个方法。

之后,您只需要确保您的所有测试类都继承自这个基类。

于 2013-04-25T13:36:00.453 回答
0

ClassInitilize 方法将为您拥有的每个测试类调用一次。例如,您可以在基本测试类中只实现一次它,但仍然会为每个测试类调用一次。

于 2013-04-25T13:36:10.633 回答