【问题标题】:How to override the call (junit5)?如何覆盖调用(junit5)?
【发布时间】:2021-06-28 16:57:15
【问题描述】:

我不知道如何阻止对 B setTitle 方法的调用,使其不执行任何操作,例如只输出到控制台(系统输出)?

在方法 B setTitle 中出现错误,但我希望测试是独立的,并且错误出现在带有 B 测试的类中

@Component
class B {
    public setTitle(String s){
        ...
    }
}

@Service
class A {

    @Autowired
    private B b;

    public getTitle(String s){
        b.setTitle(s);
    }
}

class ATest {

    @Autowired
    private class A;


    @Test
    void getTitleTest() {
        //TODO how to override the call class B getTitle
    
    }
}

【问题讨论】:

  • 第一行是否有拼写错误;一个“a”而不是一个“o”?它在代码中吗?您是否使用 IDE 来标记注释问题(假设那里有错字)?
  • 一个关于其他的问题,仔细阅读;)
  • 我仔细阅读了它,非常仔细地编辑了它作为回应。编码是关于细节的,任何细节都可能导致问题或破坏解决方案的尝试。您将我们引导到 B 类的方法,但是 B 类有一个注释错误,所以我从那个开始。抱歉,这就是我所得到的。
  • 没什么大不了的,没有借口。当您拥有更多经验时,您将建立正确的联系。这个注解与它无关!问题是如何从调用中覆盖方法。如果问题是“为什么没有组装代码”,那么一件小事就很重要。我更正了注释以取悦您。

标签: java spring junit5


【解决方案1】:

首先,请注意您在此处发布的内容存在很多问题。 您声明了没有返回类型的方法、执行突变的 getter 并尝试自动装配 private class

要回答您的问题,您要做的是创建一个 Mock 并使用 MockRunner 运行它。

这是一个测试,将验证您的类 B 中的方法是否已按预期调用。

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class ATest {

  @Mock
  private B b;

  @InjectMocks
  private A a;

  @Test
  public void getTitleTest() {
    a.getTitle("soemthing");

    Mockito.verify(b).setTitle("soemthing");
  }
}

如果您确实希望它在控制台上打印一些东西,您可以通过捕获方法的参数并简单地将其打印出来来更改测试方法,如下所示:

  @Test
  public void titleTester() {
      ArgumentCaptor<String> stringArgumentCaptor =      ArgumentCaptor.forClass(String.class);
      doNothing().when(b).setTitle(stringArgumentCaptor.capture());

      a.getTitle("soemthing");
      System.out.println(stringArgumentCaptor.getValue());
  }

【讨论】:

  • 唉,没用!问题的症结在于。该类正在调用错误所在的类 B 的方法。我想锁定 B 类的 setTitle 方法以忽略。想象一下在 setTitle 中抛出一个异常,我需要忽略这个方法。调用它但什么也不做或覆盖它的行为,这样就没有 NPE public setTitle (String s) { throw a new exception NullPointerException (""); }
猜你喜欢
  • 2021-02-12
  • 1970-01-01
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
  • 2022-07-24
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
相关资源
最近更新 更多