【问题标题】:Java method simulationJava方法模拟
【发布时间】:2016-12-11 19:49:07
【问题描述】:

作为行为测试的一部分,我需要模拟给定类中的方法调用。

所以说如果我有这样的课程:

class A {
public void abc(){
    new classB().getData();
}

public void xyz( boolean callabc){
    if (callabc) {
        abc();
    }
}

所以我的要求是首先找到 A 类中的所有方法,然后找到哪个方法正在执行哪个调用,例如 xyz 正在调用 abc,而它正在调用 B 类的 getData 方法。

是否有可能在 Java 中获取所有这些数据?

【问题讨论】:

  • 嗯...看起来你想要反思 - 我认为现在开始学习反思还为时过早。但我可能错了。
  • 那不是有效的java。除了不理解这个问题。
  • 反射可以得到方法。我不太确定找到调用其他方法的方法
  • 谢谢你们。反射是我也在尝试的一件事,但我陷入了一种调用另一种方法的困境。尤其是当呼叫超出当前课程(在我的示例中为 A 类)时。
  • Java 不提供有关从代码调用的方法的信息或对方法代码的任何见解。只是存在这些方法,它们的名称和参数。但是,您可以检查类的字节码(在任何语言中,它只是一种文件格式)并基本上反编译代码以获得所需的信息。我想这真的很困难,有时甚至是不可能的,因为可以通过反射调用方法,并且它被用来故意混淆来自此类工具的方法调用。

标签: java class


【解决方案1】:

你可以把你的代码变成这样的:

public class A {
    private final ClassB b;

    public A(ClassB b) {
        this.b = b;
    }

    public void abc(){
        b.getData();
    }

    public void xyz( boolean callabc){
        if (callabc) {
            abc();
        }
    }
}

然后您可以在测试期间传递 B 类的模拟实现。然后,您可以使用 mockito 库验证是否在具有特定参数的 mock 上调用了某些方法: http://static.javadoc.io/org.mockito/mockito-core/2.3.0/org/mockito/Mockito.html#1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多