问题描述
我正在构建一个spring boot实用程序,并为此实用程序编写测试用例。我有内部调用另一个静态方法的方法。想模拟静态方法调用的返回值。尝试使用PowerMock,但无法实现此目的。您能否让我知道需要做什么。下面是代码段。
@Slf4j
public class DOBMaskingStrategy extends AbstractMaskingStrategy {
public DOBMaskingStrategy() {
super();
}
@Override
public String name() {
return "DOB";
}
@Override
public String unmask(String input,String key) {
validate(input,key);
log.info("Should Wrap Enc Value {}",UserDataHolder.shouldWrapEncValue());
if(UserDataHolder.shouldWrapEncValue()) {
int indexofenc = input.indexOf(UserDataHolder.encwrapper());
if(indexofenc != -1) {
return input.substring(0,indexofenc)+unmaskdata(input.substring(indexofenc),key);
}else {
return unmaskdata(input,key);
}
}else {
int inputlength = input.length();
Assert.isTrue(inputlength == 10,"Please provide a proper date in the format mm/dd/yyyy");
return input.substring(0,inputlength-4)+unmaskdata(input.substring(inputlength-4),key);
}
}
}
@Slf4j
public class UserDataHolder {
private static Environment env = AppContext.getBean(Environment.class);
private static final boolean WRAPENCVALUE = null != env.getProperty("app.pii.settings.wrapencvale")? Boolean.parseBoolean(env.getProperty("app.pii.settings.wrapencvale")):false;
public static boolean shouldWrapEncValue() {
return WRAPENCVALUE;
}
}
测试用例
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class)
@AutoConfigureMockMvc
@PrepareForTest({UserDataHolder.class,DOBMaskingStrategy.class})
@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT,classes=PiiApplication.class)
@ComponentScan({"com.test"})
@TestPropertySource("classpath:application_2.properties")
class PiiApplicationWithEncTest {
@Test
void contextLoads() {
}
@Before
public void setUp() {
PowerMockito.mockStatic(UserDataHolder.class);
//when(UserDataHolder.shouldWrapEncValue()).thenReturn(true); //Tried this one as well. Didn't work.
PowerMockito.stub(PowerMockito.method(UserDataHolder.class,"shouldWrapEncValue")).toReturn(true);
}
@Test
public void maskAndUnmaskWitnWrapper() throws Exception {
String key = new Random().ints(97,122 + 1)
.limit(30)
.collect(StringBuilder::new,StringBuilder::appendCodePoint,StringBuilder::append)
.toString();
UserDataHolder.updateUserEncriptionKey(key);
String inputdate = "12/03/1981";
AbstractMaskingStrategy dobMasking = MaskingUtilManager.getStrategy("DOB");
PowerMockito.spy(dobMasking);
String maskdatedata = dobMasking.mask(inputdate,key);
String unmaskdatedata = dobMasking.unmask(maskdatedata,key);
assertThat(inputdate.equals(unmaskdatedata));
String unmaskdatedataTwo = dobMasking.unmask(maskdatedata.substring(maskdatedata.indexOf(UserDataHolder.encwrapper())+UserDataHolder.encwrapper().length(),maskdatedata.length()-1),key);
assertThat("1981".equals(unmaskdatedataTwo));
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)