【问题标题】:Mock a Static Method which calls a void method with arguments passed into it模拟一个静态方法,它调用一个带有参数的 void 方法
【发布时间】:2016-09-23 17:53:20
【问题描述】:

我有 getNameLength 方法,我需要使用 PowerMockito 模拟 setName 方法。我应该如何模拟 setName 方法中的输入参数(sb,输入),以便我可以使用模拟数据运行我的 getNameLength 测试用例?

public class ExampleClass{ 

  public static int getNameLength(StringBuilder sb ){
      setName(sb, "Test");
      return sb.toString().length();
  }

  public static void setName(StringBuilder sb, String input){
      sb.append(input);
  }
}

【问题讨论】:

  • 请问您为什么觉得这里需要使用模拟?
  • 这里有点不清楚你想要实现什么 - 这个例子似乎有点做作。尝试发布更真实的代码而不是ExampleClass
  • 顺便说一句,您可以直接使用StringBuilder#length() 获取字符串生成器的长度,而无需通过toString() 作为中间步骤
  • 提示:请对我的回答提供一些反馈。如果有帮助,考虑采纳;如果没有 - 让我知道你缺少什么!

标签: java unit-testing mocking mockito powermock


【解决方案1】:

你为什么需要那个 set 方法?

public static int getNameLength(StringBuilder sb ){
  sb.append(sb, "Test");
  return sb.toString().length();

}

与您的代码所做的完全相同。

关于您的实际问题:您不需要模拟此类代码。您控制所有“输入”(进入方法的 StringBuilder);你会得到一个值回来。

所以你可以写一个简单的断言,比如

assertThat(getNameLength(new StringBuilder()), is(4));

例如(检查将“Test”添加到空构建器会导致 4 字符字符串)。

最后:您的问题似乎也是:您不了解有关 java 的一些基本知识,尤其是 static 它接缝。首先,您的示例代码根本没有意义。因此:暂时忘记嘲笑;更好地专注于更好地理解您的代码首先应该做什么!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 2016-06-24
    • 1970-01-01
    相关资源
    最近更新 更多