JUnit使用接口作为参数测试方法

罗马:

如标题所述,我要测试以下方法:

Class A:

private List<String> s;
    
public A() {
    s = new ArrayList<String>();
    s.add("Gregor");
    s.add("Example");
    s.add("Example2");
}

public String argr(B b) { //B-> Interface
        int t = b.t();
        String r = "Hello ";
        for(String z:s ) {
            boolean x = b.f(t, 5);
            if(x) {
                r += z;
            }
        }
        return r;
    }

使用接口B:

public interface B {
    int t();
    boolean f(int t, int i);
}

测试:

class Example{
  public B b;
  private A example = new A();

  @Test
  void test() {
    //assert(example .s() == "Hello GregorExampleExample2");
        
    System.out.println(example .s(b));
        
    //bsp.A(c);
    }

}

Issue:方法:b,要求使用Interfacea作为参数,可以通过此Method实现接口:Class A implements B{}

问题:测试时无法识别A类中接口实现的方法。

问题1:您如何使用接口作为参数的jUnit测试方法?

问题2:您是否需要在jUnit测试类中实现接口方法,使其起作用?

Manox:

您可以为每个测试用例创建一个匿名类,如下所示:

b = new B() {
    @Override
    public int t() {
        return 0;
    }

    @Override
    public boolean f(int t, int i) {
        return false;
    }
};

只需将返回值替换为适合您的测试用例的值,但要避免在类中放入任何逻辑(因为那样的话,您还必须对其进行测试)。

如果您不想为每个测试用例实现该接口,则另一种可能性是使用Mockito模拟您的接口:

B mock = Mockito.mock(B.class);
Mockito.when(mock.f(Mockito.anyInt(), Mockito.anyInt())).thenReturn(false);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在使用尚未实现为方法参数的接口的类上执行JUnit测试?

使用数组作为测试方法的参数

使用实现接口作为模板的jUnit测试类进行设计的正确性

将模拟对象作为JUnit参数传递给具有参数的测试方法

使用接口作为方法的泛型参数时,如何访问具体接口实现的值

使用参数化测试忽略 junit 测试

将接口方法作为参数传递

接口作为方法/构造函数参数

Java方法接受List接口作为参数

接口作为Java中的方法参数

C ++对象作为接口方法的参数

JUnit参数化测试方法的替代方法

使用矩阵接口作为参数的Go函数

测试使用JUnit 4中下同样的测试方法的多个参数相同的异常

无法使用JUnit测试方法

Junit - 测试使用 Foreach 的方法

Java的:调用从JUnit的主要实现接口方法 - 测试

是否可以使用这些接口作为参数来创建方法?

DSL,使用 lambda 扩展接口方法,接收器作为参数

C#:使用实现私有接口的对象参数测试方法

传递参数作为接口

接口作为函数的参数

接收接口作为参数

如何使用JUnit或Mockito测试使用无参数和返回值的Random()方法

使用谓词作为单元测试的参数

测试使用enquo()作为NULL参数的函数

有什么方法可以让Eclipse始终使用常见的VM参数来运行JUnit测试?

JUnit - 如何使用不同参数测试相同方法中的重复指令?

带有接口参数的接口方法,其中实现有自己的类作为参数