Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于模拟框架_Java_Unit Testing_Mocking_Powermockito - Fatal编程技术网

Java 关于模拟框架

Java 关于模拟框架,java,unit-testing,mocking,powermockito,Java,Unit Testing,Mocking,Powermockito,我正在使用powermock,对此我有几个问题 我们是否需要修改我们的代码,以防(在后期)发现它不能用powermock或mockito或任何其他测试框架进行测试? i、 e.我们应该停止编写静态/私有方法吗?一些框架无法测试它(我知道powermock有能力测试此类方法) 模拟/监视对象时,是否应调用实际方法?i、 我通过在方法调用中保留一个调试点来检查它,执行是否应该转到调试点 请帮助我理解这些事情 1.)不稳定/可测试性差的代码通常是设计差的标志,因此您应该更改代码。大量静态的方法/状态是

我正在使用
powermock
,对此我有几个问题

  • 我们是否需要修改我们的代码,以防(在后期)发现它不能用
    powermock
    mockito
    或任何其他测试框架进行测试? i、 e.我们应该停止编写静态/私有方法吗?一些框架无法测试它(我知道
    powermock
    有能力测试此类方法)

  • 模拟/监视对象时,是否应调用实际方法?i、 我通过在方法调用中保留一个调试点来检查它,执行是否应该转到调试点

  • 请帮助我理解这些事情

    1.)不稳定/可测试性差的代码通常是设计差的标志,因此您应该更改代码。大量静态的方法/状态是一种代码气味,这意味着糟糕的设计并最终导致更高的维护工作。 私有方法通常应该在它们的公共调用方中进行测试,因为它们只是助手。在我看来,私有方法永远不应该直接测试,因为它们可能通过重构随时发生变化,因为类的公共接口应该是某种稳定的


    2.)模拟时,不应调用目标方法/对象。虽然间谍应该调用被间谍的方法/对象

    我被带进了一个拥有巨大遗留系统的团队,但他们正在为其添加新的类/方法。这些类和方法将达到10 DAO/DAL。然而,这些DAO/DAL已经启动并运行了20多年,很少出现故障。所以他们的行为几乎是意料之中的。在本例中使用mock效果非常好,我可以为新代码编写纯粹的单元测试,并模拟所有DAO以返回对象/或异常来检查边界场景

    当您必须访问数据库、在internet上建立连接或拥有一个特别大的类时,mock非常适合,您不想实例化该类,只从中调用一个方法。如果您有一个类,它的构造函数中需要许多对象(每个对象都需要实例化),但实际上您只需要获取class.CanRetry()(返回true或false),那么在这个实例中,mock可以很好地工作

    锤子是一个很好的工具,但它不会帮你疏通厕所。。。至少很好。mock是知道如何使用的一个很好的工具,但是它有一定的时间和地点

    有关如何/何时使用mock的更多信息,请参阅以下两篇文章:

    (阅读时间稍长,但信息丰富)

    关于你的第二个问题,下一篇文章将让你最好地理解所有不同类型的“双重测试”之间的区别,包括模拟对象、测试间谍、虚拟对象等。。。