我是单元测试的新手,我只是想知道如果一个方法在内部调用自己的公共方法来计算返回值,如下所示:
public Integer getTotalBeforeSubscriptionDiscount() {
return getTotal() + getSubscriptionSavings()
}
Run Code Online (Sandbox Code Playgroud)
我正在为它编写单元测试,我的问题是:我应该使用特定的整数值来匹配结果,结果与期望,例如
Integer expected = 10;
Integer actual = obj.getTotalBeforeSubscription();
assertEquals(expected, actual);
Run Code Online (Sandbox Code Playgroud)
OR是否允许调用公共方法并在运行时计算期望值,如下所示:
Integer expected = obj.getTotal() + obj.getSubscriptionSavings();
assertEquals(expected, obj.getTotalBeforeSubscription());
Run Code Online (Sandbox Code Playgroud) 是否可以在与子类具有相同名称和类型的超类字段中注入模拟。
在我的情况下,我有一个控制器类
abstract class BaseController {
protected AccessManager accessManager;
}
Run Code Online (Sandbox Code Playgroud)
它由如下类扩展:
class ApiController<T> extends BaseController {
}
Run Code Online (Sandbox Code Playgroud)
最后,一个更专业的控制器像这样扩展它:
class PersonController extends ApiController<Person> {
private AccessManager accessManager;
}
Run Code Online (Sandbox Code Playgroud)
我正在为PersonController它编写单元测试,并在测试它时,它的一些方法调用BaseController的方法,委托调用它的protected成员对象,它总是null.
我曾尝试使用@InjectMocks和用于ReflectionTestUtils.setField设置 的受保护字段BaseController,但这些方法最终只会在PersonController类上设置字段,因为它们的名称和类型相同。
我在这方面花了很多时间,但无法解决。请帮忙。谢谢
我试图了解一个涉及 spring 声明性事务注释的项目。该函数的主体没有进行任何 JDBC 调用或调用 JPA 存储库方法。它所做的只是调用一些第三方 API 并转换它的结果,它甚至没有将响应保存在数据库中。所以根本没有数据库交互。
我的问题是是否值得在此方法上使用 @Transactional 注释?因为根据我的理解,@Transactional 仅有助于保持数据库的一致性。