Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我们可以对所有单元测试类只使用一个ClassInitialize吗?_C#_Sql_Unit Testing_Visual Studio 2012 - Fatal编程技术网

C# 我们可以对所有单元测试类只使用一个ClassInitialize吗?

C# 我们可以对所有单元测试类只使用一个ClassInitialize吗?,c#,sql,unit-testing,visual-studio-2012,C#,Sql,Unit Testing,Visual Studio 2012,我开始实习,我的工作是在一些项目上设置单元测试 我已经实现了几十个测试,现在我想创建一种机制,在每次运行之后或之前恢复原始数据库 我有必要的脚本来创建、填充和删除数据库,但我不想在每个测试类中调用这个机制,而是只调用一次 当我开始一个或所有测试时,是否可以创建一个只调用一次的Classifialize 编辑 所有I/您需要的是使用AssemblyInitialize和AssemblyCleanUp,所有问题都已解决 您可以创建一个基类,并使用ClassInitialize属性装饰该基类中的方法

我开始实习,我的工作是在一些项目上设置单元测试

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

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

当我开始一个或所有测试时,是否可以创建一个只调用一次的Classifialize

编辑


所有I/您需要的是使用AssemblyInitialize和AssemblyCleanUp,所有问题都已解决

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


之后,您只需确保所有测试类都继承自该基类。

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


之后,您只需确保所有测试类都继承自该基类。

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

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

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

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

  [TestCleanup()]
  public void Cleanup()
  {
     //Rollback DB Transaction, database returns to the initial state
  }
您需要有一个以前填充的测试数据库来运行测试

作为旁注,数据库访问应该在集成测试中测试,而不是在单元测试中测试。添加外部依赖项不符合单元测试定义


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

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

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

  [TestCleanup()]
  public void Cleanup()
  {
     //Rollback DB Transaction, database returns to the initial state
  }
您需要有一个以前填充的测试数据库来运行测试

作为旁注,数据库访问应该在集成测试中测试,而不是在单元测试中测试。添加外部依赖项不符合单元测试定义


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

您需要的所有I/O是使用AssemblyInitialize和AssemblyCleanUp,并且所有问题都已解决

我/你所需要的就是使用AssemblyInitialize和AssemblyCleanUp,一切都已解决

哼。。。然后,我必须在每次运行时创建、填充和删除所有表。每次跑步都需要很长时间。或者我可以把我所有的测试放在同一个测试课上。是的,是的。不过,您可以尝试使用属性。但我想这不是一个很好的解决方案。。。然后,我必须在每次运行时创建、填充和删除所有表。每次跑步都需要很长时间。或者我可以把我所有的测试放在同一个测试课上。是的,是的。不过,您可以尝试使用属性。但我认为这不是一个很好的解决方案。一般来说,单元测试不应该依赖于数据库调用。相反,当涉及到数据库访问时,使用某种形式的模拟来模拟可预测的结果。你可以接受最好的答案,从而向所有人表明它已经解决了。但我写下了最好的答案,给了我我需要的决定。。。那么我必须做什么呢?一般来说,单元测试不应该依赖于数据库调用。相反,当涉及到数据库访问时,使用某种形式的模拟来模拟可预测的结果。你可以接受最好的答案,从而向所有人表明它已经解决了。但我写下了最好的答案,给了我我需要的决定。。。那么我必须做什么?@AndreiZubov:嗯,这就是为什么,除其他原因外,真正的数据库不应该用于单元测试:这是我为测试设置的方式,但init在我看来花费了太多时间。@AndreiZubov:嗯,这就是为什么,除其他原因外,真正的数据库不应该用在单元测试上:这是我为测试设置的方式,但是init占用了我太多的时间。我不确定是否能很好地理解。我创建了一个简单的C类,其中包含了我所有测试所需的参数,比如数据库的设置和数据库的删除,我将所有测试设置为从这个类继承而来?我不太清楚。我创建了一个简单的C类,其中包含了我所有测试所需的参数,比如数据库的设置和数据库的删除,我将所有测试都设置为从这个类继承的?