需要找到现成的服务。实现可以是 for Angular
( TypeScript
) 或常规JS
模块。
任务:有必要从用户那里获得反馈,要求更正网站上的文本。为了简化用户和开发人员之间的交互,需要一种机制来突出显示文本并提出修复建议。
算法:
- 选择有错误的文本
- 按下热键(CTRL\SHIFT\ALT + 任何东西)
- 出现一个带有文本字段的窗口,用户在其中输入文本的更正版本
- 数据被发送到管理员可以查看请求的服务器
从设计的角度来看,哪个代码更正确
这样的:
public List<String> getStringList(int expression){
List<String> list;
switch(expression){
case 1:
list = getList1();
break;
case 2:
list = getList2();
break;
...
}
return list;
}
或者像这样:
public List<String> getStringList(int expression){
switch(expression){
case 1:
return getList1();
case 2:
return getList2();
...
}
}
目前我们没有修改或建议我们需要修改list
.getStringList
我想阅读一个合理的答案,支持一个或另一个选项。
在第一种情况下,我们有一个函数的退出点,switch
我们只分配我们返回的变量,在第二种情况下,我们得到几个退出点。
我们收集了一系列关于Kotlin的高质量文献。
如果您有什么要添加到一般答案中,请添加。
印刷出版物的格式:
标题,作者。ISBN 年。
欢迎使用以下格式指示俄语翻译:
标题,作者。出版商,年份,ISBN。
电子资源以链接的形式制作。
此列表是社区支持的编程学习资源集合的一部分。
我正在尝试测试具有@PreAuthorize
需要用存根替换的服务的控制器
PlayerController.java
@RestController
@RequestMapping(value = "/player")
public class PlayerController {
@Autowired
private PlayerService playerService;
@PreAuthorize("hasAuthority('ADMIN')")
@RequestMapping(value = "/all", method = RequestMethod.GET, produces = "application/json")
public
@ResponseBody
ResponseEntity<List<String>> loadByAdmin()
throws Exception {
return new ResponseEntity<>(playerService.getPlayers(), HttpStatus.OK);
}
}
PlayerServiceImpl.java
@Service
public class PlayerServiceImpl implements PlayerService{
@Autowired
private PlayerRepo playerRepo;
@Transactional(readOnly = true)
public List<String> getPlayers()() {
return playerRepo.findAll();
}
}
第一种测试方式:在这种情况下,测试通过了,但是正如你所看到的,用户authority
已经设置SOMEONE
了,所以测试应该失败,因为 此控制器仅供管理员使用
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = {WebAppConfig.class, SecurityConfiguration.class})
public class PlayerControllerTest {
private MockMvc mockMvc;
@Autowired
private FilterChainProxy springSecurityFilterChain;
@Mock
private PlayerService playerService;
@InjectMocks
private PlayerController playerController;
@Test
public void loadByAdmin()
throws Exception {
Player player = new player();
when(playerService.getPlayers()).thenReturn(Collections.singletonList(player));
mockMvc.perform(get("/circuit/all").with(user("adm").password("123")
.authorities(new SimpleGrantedAuthority("SOMEONE"))) //Не завалился
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk());
verify(playerService, times(1)).getPlayers();
verifyNoMoreInteractions(playerService);
}
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders
.standaloneSetup(playerController)
.apply(SecurityMockMvcConfigurers.springSecurity(springSecurityFilterChain))
.build();
}
第二种测试方法:对于授权,它工作正常,但 PlayerService 没有被替换为存根。
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = {WebAppConfig.class, SecurityConfiguration.class})
public class PlayerControllerTest {
private MockMvc mockMvc;
@Autowired
private WebApplicationContext wac;
@Mock
private PlayerService playerService;
@InjectMocks
private PlayerController playerController;
@Test
public void loadByAdmin()
throws Exception {
Player player = new player();
when(playerService.getPlayers()).thenReturn(Collections.singletonList(player)); //Не получилось заглушить
mockMvc.perform(get("/circuit/all").with(user("adm").password("123")
.authorities(new SimpleGrantedAuthority("ADMIN")))
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk());
verify(playerService, times(1)).getPlayers(); //Вызова не было
verifyNoMoreInteractions(playerService);
}
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
this.mockMvc.webAppContextSetup(wac)
.apply(springSecurity())
.build();
}
如何制作它以便您可以用存根替换它PlayerService
并同时工作@PreAuthorize
?