Nunit 如何在Moq中验证statc方法

Nunit 如何在Moq中验证statc方法,nunit,moq,Nunit,Moq,我是新来的Nunit和Moq 我有一个这样的静态类: public static class StaticClass1 { public static void Prepare() { //some logic } } public static class StaticClass2 { public static void Initialize(some_parameter) { //some logic if (some_condition(so

我是新来的
Nunit
Moq

我有一个这样的静态类:

public static class StaticClass1
{
  public static void Prepare()
  {
    //some logic
  }
}

public static class StaticClass2
{
  public static void Initialize(some_parameter)
  {
    //some logic
    if (some_condition(some_parameter)) 
    {
      StaticClass1.Prepare();
    }
  }
}

我需要测试AccountService.Initialize()函数,在该函数中我需要验证StaticClass1.Prepare()是否至少被调用过一次

我认为要回答这个问题,我会说“您需要获得如何分层项目的经验”

当对一个方法进行单元测试时,您希望对单个方法进行单元测试,并模拟依赖项,如果我理解正确的话,您会尝试这样做。现在,将静态公共方法从一个类调用到另一个类中的另一个静态方法并不理想,因为这样很难隔离单元测试和它们应该测试的内容(最终在同一个单元测试中测试两个完全不同的方法,而不是分离代码和单元测试)

在另一种方法中,您打破了D-in-SOLID(依赖项反转原则),您可以在这里了解更多->。您希望依赖抽象而不是具体的类

最后,我想我会有点自私,分享一个我自己写的文章系列的链接。它是关于测试驱动的开发,使用Moq作为单元测试工具,重点关注在分层和单元测试一个完整的项目(在小规模)时如何思考。我绝对相信,它将帮助您了解如何继续使用自己的项目和代码

它基于4篇文章。本系列的第一部分在这里->


希望有帮助

Prepare()
会产生哪些可以观察到的副作用?它没有任何副作用,我猜在这种情况下,除了不会引发异常之外,真的没有什么可以验证的<众所周知,代码>静态操作很难进行单元测试,因为它们不能被模拟,并且副作用存在于任何单个原子测试的范围之外。从概念上考虑在这里验证什么。如果对系统的状态没有明显的影响,那么就没有什么可测试的了。创建一个副作用,比如向类添加一个静态属性,并在Prepare方法中设置该属性。然后你可以在你的测试方法中测试它。可能的