gpt4 book ai didi

java - 测试私有(private)静态方法

转载 作者:行者123 更新时间:2023-11-29 03:15:55 24 4
gpt4 key购买 nike

您好,我想测试 generateKey 方法和 Dispatcher 发送的消息。我试图模拟类和公共(public)方法 verifyOtherDetails()。在其中,我创建了一个期望,即调度程序方法具有字面值,但它总是通过。任何帮助将不胜感激。

请参阅底部以获取我尝试的代码,谢谢。

abstract class KeyGen {

private static void generateKey(String key, String username){
if(Strings.isNullOrEmpty(key)){
Dispatcher.dispatch(new WarningString(String.format("The key is null or empty for user %s", username)));
}else{
Dispatcher.dispatch(new InfoString(String.format("The key is correct for user %s", username)));
}
}

public void verifyOtherDetails(String address, Map<String, String> favouriteFilms){
String key ="";
String username ="";
generateKey(key, username);
}
}

public class TestKeyGen {

@Test
public void testKey() {
new MockUp<KeyGen>() {
@Mock()
public void verifyOtherDetails() {

String key = "sfjhlkjhfkjdhlsk";
final String username = "Daniel";
new Expectations() {
{
Dispatcher.dispatch(new WarningString(String.format("The key is null or empty for user %s", username)));
}
};
}
};
}
}

最佳答案

鉴于您的设计,我会说很难测试您的方法。基本上这是因为您使用的是调度程序类的静态方法,所以您不能轻易地模拟它。

不过你有多种选择。您可以在测试中订阅调度员消息并检查预期的消息是否到达。这是侵入性最小的,可用作集成测试。

另一种选择是将您的调度程序静态调用包装在一个接口(interface)中,并将该接口(interface)的模拟注入(inject)到您的 KeyGen 类中,然后通过您的公共(public)方法测试接口(interface)上的方法是否被调用。

public interface DispatchWrapper{
void dispatch(IString stringToDispatch);
}

public class StaticDispatcher : DispatchWrapper{
void dispatch(IString stringToDispatch)
{
Dispatcher.dispatch(stringToDispatch);
}
}

abstract class KeyGen {
private DispatchWrapper wrapper;

public KeyGen(DispatchWrapper wrapper){
this.wrapper = wrapper;
}
private static void generateKey(String key, String username){
if(Strings.isNullOrEmpty(key)){
wrapper.dispatch(new WarningString(String.format("The key is null or empty for user %s", username)));
}else{
wrapper.dispatch(new InfoString(String.format("The key is correct for user %s", username)));
}
}

public void verifyOtherDetails(String address, Map<String, String> favouriteFilms){
String key ="";
String username ="";
generateKey(key, username);
}
}

第三种选择是将私有(private)方法移动到不同的静态类并将其公开,然后您可以测试该类(与您的静态调度程序有相同的问题)。然后您的 KeyGen 类可以成为一个 VerifyingKeyGen,它只是验证然后委托(delegate)给其他方法来实际生成 key 。这很好地分离了您所关心的两个问题,即生成新 key 和验证详细信息

public static class KeyGen {

public static void generateKey(String key, String username){
if(Strings.isNullOrEmpty(key)){
Dispatcher.dispatch(new WarningString(String.format("The key is null or empty for user %s", username)));
}else{
Dispatcher.dispatch(new InfoString(String.format("The key is correct for user %s", username)));
}
}

abstract class VerifyingKeyGen{

public void verifyOtherDetails(String address, Map<String, String> favouriteFilms){
String key ="";
String username ="";
KeyGen.generateKey(key, username);
}
}

关于java - 测试私有(private)静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26678518/

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