如何编写一个mockito测试用例,如果...其他语句也包括异常测试,我对此很困惑。UserService是一个接口
用户工厂。JAVA
public class UserFactory {
@Autowired
private List<UserService> UserList;
private final Map<String, UserService> UserMap = new HashMap<>();
@PostConstruct
public void initUserMap() {
for (final UserService user : UserList) {
UserMap.put(user.getUserId(), user);
}
}
public UserService getUser(String userId) {
final UserService userService = UserMap.get(userlId);
if (null == userService) {
throw new IllegalArgumentException("user are not in the group");
}
return userService;
}
}
用户服务(接口)
public interface UserService{
String getUserName();
String getUserId();
}
这是我的测试,但它不正确。。。
@RunWith(MockitoJUnitRunner.class)
public class UserServiceTest {
@Mock
private UserService userService;
@InjectMocks
private UserFactory UserFactory;
private Map<String, User> UserMap;
private String userId = "123";
@Before
public void set_up(){
UserMap = new HashMap<>();
UserMap.put(userId, userService);
}
@Test
public void getUser(){
when(UserMap.get(userId)).thenReturn(userService);
userService actual = userServiceFactory.getUser(userId);
assertEquals(UserMap.get(userId), actual);
}
}
1) 您编写的是单元测试,而不是切片测试或集成测试。在这里,你不需要把Spring作为一个组件来测试<如果你对这个领域感兴趣,你可以阅读我的问题/答案。
2)逻辑中的一个分支(if/ett
)意味着您有多个场景。
不同的场景意味着通常不同的测试方法和有意义的名称。
您还可以依赖给定的/当/然后习语。
3) 因为在您的测试中,分支的输入信息是由mock提供的,这也意味着您将在每个测试方法中为mock注册不同的行为。
4) UserService
不需要被嘲笑。它必须是模拟返回的值,而不是模拟本身。在这里,你必须模拟地图
。
5) 测试UserFactory
,因此必须将其命名为UserFactoryTest
。
例如:
@RunWith(MockitoJUnitRunner.class)
public class UserFactoryTest {
@Mock
private Map<String, User> UserMap;
@InjectMocks
private UserFactory UserFactory;
private String userId = "123";
@Test
public void getUser(){
when(UserMap.get(userId)).thenReturn(userService);
userService actual = userServiceFactory.getUser(userId);
assertEquals(UserMap.get(userId), actual);
}
@Test
public void getUser_with_unknown_userId(){
Assertions.assertThrows(IllegalArgumentException.class,
()-> userServiceFactory.getUser(userId));
}
}
你注意到,在第二种情况下,我没有为mock注册任何行为
默认情况下,Mockito将返回null
,实际上这就是引发异常的原因。所以这很好
还要注意,我是通过依赖JUnit 5库而不是JUnit 4库来编写断言的,根据所使用的运行程序,您似乎使用了JUnit 4库
你应该考虑切换到JUnit 5进行新的测试。
所以读了一些书之后我看到了 不是使用可选选项的首选方式(http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html).但如果我有这样一个if语句: 这是最好的方法还是有更推荐的方法?
我已经开始练习R闪亮,请在下面的代码中找到我试图进行计算的部分。请协助获取输出,因为我无法生成。 用户界面 库(发光)库(发光板) 我的页面 titlePanel(“零基成本模型”), 侧边栏 侧边栏面板(“输入客户详细信息”), 条件="input.tabselect==1", conditionalPanel(condition=“input.tabselect==5”, #submitBut
下面的代码只是检查null控件并生成mView。如果提供了所有条件,则handleUrl(数据)方法有效。 当我将代码与RxJava一起使用时,我会在下面编写代码。 我写的两个代码都工作相同。然而,当我尝试向代码中添加新条件时,问题就开始了。例如,如果intent为null,我可以创建一些新的操作符。 示例代码; 但是我不能使用RxJava过滤器方法编写这段代码。一旦过滤器返回false,操作就完
我想知道在ReactJSJSX中是否可以嵌套if else if? 我尝试过各种不同的方法,但我无法让它发挥作用。 我正在寻找 我已经试过了,但是我不能把它渲染出来。我试过各种方法。添加嵌套if后,它总是会中断。 使现代化 最后,我选择了将其移动到renderContent并调用该函数的解决方案。不过,这两个答案都有效。我想我可以使用内联解决方案,如果它用于简单的渲染和更复杂的情况下的渲染内容。
根据angular 4项目中的状态条件,我必须将4个可用类(黄色、绿色、红色和白色)中的一个应用到我的div。 上述陈述中只有一个条件可以为真。 如何实现这一点(如果其他如果其他...Angular4) 中的其他语句?
问题内容: 我注意到以下代码在Python中是合法的。我的问题是为什么?是否有特定原因? 问题答案: else仅当你的while条件为假时才执行该子句。如果你break超出循环范围,或者引发了异常,则不会执行该异常。 考虑它的一种方法是关于条件的构造: 一个示例可能类似于: