如何使“ Optional.isPresent()”的模拟返回“ false”?

时间:2020-07-03 06:44:43

标签: groovy spock

我想模拟下面的语句,该语句返回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);

1 个答案:

答案 0 :(得分:1)

如果您只想让Optional返回falseisPresent(),则完全不需要模拟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()
  }
}

当然,此测试仅测试模拟对象是否实际返回存根返回值,但是您可以理解。我希望这是您想知道的,因为您的问题本身或您发布的代码段都不够清晰,无法传达您的意图。