gpt4 book ai didi

java - 针对以下场景进行 Junit 测试

转载 作者:行者123 更新时间:2023-12-01 08:09:58 27 4
gpt4 key购买 nike

考虑下面的类

public class Validator {

boolean startValiadation(UserBean user){
//This method is visible inside this package only
return validateUser(user);
}

private static boolean validateUser(UserBean user){
//This method is visible inside this class only
boolean result=false;
//validations here
return result;
}
}

由于上述方法的安全性要求,我按照上述方式进行了编码。现在我想使用 Junit 编写测试用例。但通常单元测试旨在测试类或单元的公共(public)接口(interface)。我仍然可以使用 reflection 来做一些我在这里期望的事情。但我想知道还有其他方法可以实现我的目标吗?

最佳答案

But generally a unit test is intended to exercise the public interface of a class or unit.

嗯,我对此并不太教条。我发现,如果您愿意成为“白盒”并测试非公开成员,通常可以获得更好的测试深度。虽然有一个滑动尺度 - 直接测试私有(private)成员相对难看,但是您可以轻松测试包私有(private)方法,只需确保您的测试与测试位于同一个包中类。

(这种方法还鼓励包私有(private)类 - 我发现,如果您严格坚持只测试公共(public) API,那么您通常最终会养成将所有类公开且许多类公开的习惯。方法是公开的,而实际上它们应该是包私有(private)的。)

在这种情况下,我建议您通过 startValiadation 方法进行测试。目前,它调用 validateUser 但忽略结果 - 我假设在实际代码中它调用该方法并对结果执行一些有用的操作,这从测试中可见。在这种情况下,您只需使用各种不同的 User 对象调用 startValiadation 并断言哪些对象应该有效。

关于java - 针对以下场景进行 Junit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18247243/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com