groovy 如何使'Optional.isPresent()(的模拟返回值为'false'?

rryofs0p  于 2023-02-11  发布在  其他
关注(0)|答案(3)|浏览(206)

我想模拟下面返回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);
rta7y2nd

rta7y2nd1#

如果您只需要一个Optional返回false for isPresent(),则根本不需要模拟Optional,只需创建一个空的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()
  }
}

当然,这个测试只测试模拟对象实际上返回了stubed返回值,但是您已经明白了。我希望这是您想知道的,因为无论是您的问题本身还是您发布的代码片段都不够清楚,无法传达您的意图。

nwsw7zdq

nwsw7zdq2#

您可以使用以下命令:
可选. empty()
在Junit测试中。
例如:

Optional<List<RelationshipDto>> relationshipDtoListOp = Optional.empty();

        when(relationshipRepository.findAllByLearner(learnerId, RelationshipType.PRIMARY)).thenReturn(relationshipDtoListOp);
55ooxyrt

55ooxyrt3#

对于Mockito,你可以使用这个值,它的工作就像一个奇迹,它为我工作。

Optional<MyClass> myClassObj = Optional.absent();
Mockito.when(serviceClass.getMethodValue(Mockito.any())).thenReturn(myClassObj);

它会自动将其指定为可选。返回时为空...干杯...

相关问题