我使用MongoDB 3.2.1 + SpringDataMongoDB 1.8.2.RELEASE和Mockito 2.0.2-beta>。]
我有用户类别:
@Document(collection = "users") public class User implements Serializable { @JsonView(UserView.Summary.class) @Id private String id; @JsonView(UserView.Summary.class) private String name; private String password; @JsonView(UserView.Summary.class) private String email; public User() { } public User(String id) { this.id = id; } public User(String name, String password, String email) { this.name = name; this.password = password; this.email = email; } // getters and setters }
和DAO层(其中的一部分):
@Repository public class UserDaoImpl implements UserDao { @Autowired private Logger LOGGER; @Autowired @Qualifier(value = "mongoTemplate") private MongoTemplate mongoTemplate; public User create(User user) { LOGGER.debug("UserDaoImpl.create: "+user); mongoTemplate.insert(user); return user; } }
现在我要像这样模拟
mongoTemplate
:
无法更改参数。我只能做:@Bean(name = "mongoTemplate") public MongoTemplate getMongoTemplate() { MongoTemplate mongoTemplate = Mockito.mock(MongoTemplate.class); List<User> allUsers = new ArrayList<>(); allUsers.add(new User("2323", "22", "[email protected]")); allUsers.add(new User("2323derfvb", "22234", "[email protected]")); Mockito.when(mongoTemplate.findAll(User.class)).thenReturn(allUsers); // **Don't work: it doesn't fill ID field for user** Mockito.doAnswer(invocation -> { Object[] args = invocation.getArguments(); ((User) args[0]).setId("2342"); return null; }).when(mongoTemplate).insert(User.class); return mongoTemplate; }
不幸的是,我有一个问题。
mongoTemplate
会在调用方法id
时填充mongoTemplate.insert(user)
字段,我可以从DAO中返回id
字段作为答案。但是,如果模拟方法返回void
,则Mockito
Mockito.doNothing().when(mongoTemplate).insert(User.class);
在这种情况下,我不能更改
user
参数。链状
Mockito.doAnswer(invocation -> { Object[] args = invocation.getArguments(); ((User) args[0]).setId("2342"); return null; }).doNothing().when(mongoTemplate).insert(User.class);
也无济于事。
谁能说我在这种情况下如何更改输入参数?
我使用MongoDB 3.2.1 + SpringDataMongoDB 1.8.2.RELEASE和Mockito 2.0.2-beta。我有User类:@Document(collection =“ users”)公共类User实现了可序列化的{@JsonView(UserView ....
我有与上述评论相同的问题。