我想模拟下面的语句,该语句返回OptionalData
。我想模拟这些数据,以使Optional.isPresent()
返回false
。
private static Optional<UserList> userListOptional
private static SharedList sharedList
sharedList = SharedList.builder()
.sharedListId(2000L)
.collaboratorList(collaboratorLists)
.build()
userListOptional = Optional.of(
UserList.builder()
.userListId(1234)
.userId(607042)
.activeFlag(true)
.userName("UnitedStates")
.sharedList(sharedList)
.build()
)
userListRepository.findByUserIdAndSharedListAndActiveFlagTrue(*_) >> userListOptional
我正在测试的代码是:
Optional<UserList> userListOptional = userListRepository
.findByUserIdAndSharedListAndActiveFlagTrue(user.getUserId(), sharedList);
答案 0 :(得分:1)
如果您只想让Optional
返回false
到isPresent()
,则完全不需要模拟Optional,只需创建一个空的即可。
假设我们有以下简化的应用程序类:
package de.scrum_master.stackoverflow.q62709855;
public class UserList {
private String name;
public UserList(String name) {
this.name = name;
}
}
package de.scrum_master.stackoverflow.q62709855;
import java.util.Optional;
public class UserListRepository {
public Optional<UserList> findByUserIdAndSharedListAndActiveFlagTrue(int userId) {
return Optional.of(new UserList("admins"));
}
}
然后您的Spock规范可能如下所示:
package de.scrum_master.stackoverflow.q62709855
import spock.lang.Specification
class UserListRepositoryTest extends Specification {
def test() {
given:
Optional<UserList> userListOptional = Optional.empty()
UserListRepository userListRepository = Mock() {
findByUserIdAndSharedListAndActiveFlagTrue(*_) >> userListOptional
}
expect:
!userListRepository.findByUserIdAndSharedListAndActiveFlagTrue(123).isPresent()
}
}
当然,此测试仅测试模拟对象是否实际返回存根返回值,但是您可以理解。我希望这是您想知道的,因为您的问题本身或您发布的代码段都不够清晰,无法传达您的意图。