gpt4 book ai didi

java - 如何使用通配符模拟泛型方法的行为

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:56:22 24 4
gpt4 key购买 nike

我正在使用 EasyMock (3.2)。我想基于 Spring Security 为我的部分安全系统编写测试。我想模拟 Authentication 以便它返回空的权限列表。其方法声明如下:

 Collection<? extends GrantedAuthority> getAuthorities();

所以我写了一个测试:

Authentication authentication = createMock(Authentication.class);
Collection<? extends GrantedAuthority> authorities = Collections.emptyList();
expect(authentication.getAuthorities()).andReturn(authorities);

但是编译器提示 andReturn 上的第三行调用:

The method andReturn(Collection<capture#1-of ? extends GrantedAuthority>) in the type IExpectationSetters<Collection<capture#1-of ? extends GrantedAuthority>> is not applicable for the arguments (Collection<capture#2-of ? extends GrantedAuthority>

我做错了什么?


更新:

当我更改 authorities 的声明时到:

Collection<GrantedAuthority> authorities = Collections.emptyList();

按照提示,还是编译不通过,但是报错有点不同:

The method andReturn(Collection<capture#1-of ? extends GrantedAuthority>) in the type IExpectationSetters<Collection<capture#1-of ? extends GrantedAuthority>> is not applicable for the arguments (Collection<GrantedAuthority>)

我确保 GrantedAuthority在两个声明中实际上是相同的 - org.springframework.security.core.GrantedAuthority .

最佳答案

从集合声明中删除项目类型,您会收到警告,但测试会正常进行。

@Test
public void testFoo()
{
// setup
Authentication mockAuthentication = createMock(Authentication.class);
Collection authorities = Collections.emptyList();
expect(mockAuthentication.getAuthorities()).andReturn(authorities);

// exercise
EasyMock.replay(mockAuthentication);
Collection<? extends GrantedAuthority> retAuth = mockAuthentication.getAuthorities();

// verify
EasyMock.verify(mockAuthentication);
assertEquals(authorities, retAuth);
}

关于java - 如何使用通配符模拟泛型方法的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20220134/

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