SpringBoot 2.Xユニットテスト——Api編(踏み込み穴付)

1918 ワード

コードを先に入力:
@SpringBootTest(classes = CrmBackendApplication.class)
@ActiveProfiles("dev")
@RunWith(SpringRunner.class)
public class CustControllerTest {

    private MockMvc mockMvc;

    @Autowired
    private CustController custController;
    
    @Before
    public void setup() {
        mockMvc = MockMvcBuilders.standaloneSetup(custController).build();
    }

    @Test
    @WithUserDetails(value = "san.zhang", userDetailsServiceBeanName = "jwtUserDetailsService")
    public void test() throws Exception {
        MvcResult mvcResult = mockMvc.perform(post("/cust/search").contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).content("{
" + "\t\"pageSize\":100,
" + "\t\"content\":\" 1462\",
" + "\t\"queryType\":\"cust_queryType_custName\"
" + "}")).andReturn(); Assert.assertEquals(200, mvcResult.getResponse().getStatus()); } }

ピット1:ymlプロファイルはdev、uat、prod環境を区別するため、ローカルであるため@ActiveProfilesコメントを追加してdev環境を指定します.バックグラウンドはアプリケーション-dev.ymlプロファイルにマッピングされます.
ピット2:制御クラスcustControllerが@Autowiredを介して自動的に注入され、mockMvcオブジェクトが構築されます.もともと学んだのは他の人が直接newしていたが、依存している各サービス類がnullであることに気づき、依存注入の問題に気づいた.
ピット3:プロジェクトでSpring Securityを使用しているため、パーミッションブロックの問題が発生するため@WithUserDetails注記で解決します.ここでvalueはあなたがログインしたユーザー名を表し、userDetailsServiceBeanNameはあなたのUserDetailsService実装クラスを指定しました.例えば私はJwtUserDetailsServiceを使用してUserDetailsServiceを実装しました.そのbeanNameはjwtUserDetailsServiceで、実装しなければならない方法loadUserByUsernameがあります.そのパラメータ「username」はもちろんあなたが追加したvalue値です.テスト方法を実行するとき、バックグラウンドではloadUserByUsernameというメソッドが自動的に呼び出されます.
ピット4:オーバーライド率のエラーをテストし、/binディレクトリの下idea 64を見つけた.exe.vmoptionsファイル、末尾に-Djavaを追加します.io.tmpdir=C:Temp、ディレクトリが存在するかどうか注意.
ピット5:パッケージ名が一致することを保証してください.