@WithMockUserテストでCommentControllerをテストしようとしていますが、ユーザーID(author_id)がnullのため、ユーザーが見つからないようですコメントの内容。テストが正しい方法で行われているかどうかはまだわかりませんが(私はまだ初心者です)、達成しようとしているのは最高のコードカバレッジですが、以前のテストでは認証されたユーザーの検索とコメント:春のブートテスト - 投稿されたコンテンツが@WithMockUserでヌルです
mockMvc.perform(get("/post/3/comment").with(authentication(authentication)).content("content")).andExpect(status().is3xxRedirection()).andExpect(view().name("redirect:/post/{id}/"));
package com.paulthemenace.blog.controllers;
import com.paulthemenace.blog.models.Comment;
import com.paulthemenace.blog.models.User;
import com.paulthemenace.blog.repositories.UserRepository;
import com.paulthemenace.blog.services.CommentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import
org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class CommentController {
@Autowired
private UserRepository userRepo;
@Autowired
private CommentService comSrv;
@RequestMapping(value = "/post/{id}/comment")
public String comment(@PathVariable("id") Long id,
@ModelAttribute("comment") Comment comment, Model model) throws
Exception {
Authentication auth =
SecurityContextHolder.getContext().getAuthentication();
if (auth != null) {
String name = auth.getName();
User currentUser = userRepo.findByUsername(name);
if (comment.getContent() != "") {
comment.setAuthor(currentUser);
comSrv.create(comment);
}
}
return "redirect:/post/{id}/";
}
}
CommentControllerTest
import com.paulthemenace.blog.controllers.CommentController;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import
org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup;
@SpringBootTest
@RunWith(SpringRunner.class)
@WebAppConfiguration
public class CommentControllerTest {
@Autowired
private CommentController commentController;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = standaloneSetup(commentController).build();
}
@Test
public void controllerIsNotNull() {
assertThat(commentController).isNotNull();
}
@Test
@WithMockUser(username = "user", password = "user")
public void checkIfContainsAuthenticatedUserAndCreatesComment()
throws Exception {
mockMvc.perform(post("/post/3/comment")
.content("comment
content")).andExpect(status().is3xxRedirection())
.andExpect(view().name("redirect:/post/{id}/"));
}
}
スタックトレース
テストは正しく行われていますか?私はこのプロジェクトをテスト駆動型開発にしたいが、私は悲惨に失敗している。 私はSpring Bootでのテストに関するリソースを探していましたが、どれもこの問題を解決できませんでした..
ありがとうございました! Barathが送られたリンクに
これを確認してくださいhttps://stackoverflow.com/questions/19430365/how-to-pass-modelattrubute-parameters-using-mockmvc – Barath