【发布时间】:2021-12-21 14:57:26
【问题描述】:
我有以下课程:
class LibraryClass implements LibraryInterface {
@Override
public void calculate(Order order)
{
//some logic
}
@Override
protected void findAll(Order order)
{
//some logic
}
protected Map resetAllValues(Order order)
{
//some logic
}
@Override
protected void sum(order) {//somelogic}
}
class MyCustomClass extends LibraryClass {
@Override
public void calculate(Order order)
{
findAll(order);
}
@Override
protected void findAll(Order order)
{
//some logic
final Map taxValueMap = resetAllValues(order);
sum(order);
}
@Override
protected void sum(order)
{
int totalCount = getTotalPrice(order);
int totalItems = getTotalItems(order);
}
private int getTotalPrice(Order order) { ...}
private int getTotalItems(Order order) { ...}
}
LibaryClass 和 LibraryInterface 来自我无法更改的库,并且我已经实现了 MyCustomClass。我的目标是使用 Mockito 来验证 totalCount 和 totalItems 的值是当我以某种顺序传入计算方法时的某个预期值。
现在我偶然发现了 2 个问题:
-
resetAllValues(order)- 我想让这个方法用 Mockito 返回一个空映射,但我不能,因为该方法受到保护。如果我不让这个方法返回一个空映射,例如它会尝试进行数据库调用并抛出异常。 -
如果我设法做到了 1.,那么我应该如何验证来自私有方法
getTotalPrice和getTotalItems的返回值是否返回正确的值。
【问题讨论】:
-
“如果我不让这个方法返回一个空映射,例如它会尝试进行数据库调用并抛出异常。”。这是在哪里完成的?
-
这是在 LibraryClass 的 resetAllValues(order) 实现中完成的。
-
@xerx593 这解决了我的第一个问题,但第二个问题仍然存在
-
2.:通常“没有人测试'非bulic'方法”,因为:它们都(理想情况下在所有(角落)情况下)都被一些“公共(方法)测试”所覆盖! ;) 所以你不会“验证私有”,而是运行多个“公共”(计算()?)测试,“发现私有方法的所有分支”......你将验证(期望/一致性)主要结果(..具有不同的输入/模拟)
-
2: How do you unit test private methods? -> “你一般不会……” ;)