2017-08-02 26 views
0

私のレストコントローラとサービスのテストは書かれません。 私は春の起動時に統合テストを書く方法、書類を読んでいます。 だから例えば私が春のブート、crudレポジトリのテスト

@RestController 
@RequestMapping(value = "users") 
public class SvcUser { 

    @RequestMapping(value = "user", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") 
    @ResponseBody 
    public ResponseEntity<String> registrateUser(@RequestBody Registration registrate) throws TimeoutException, SocketTimeoutException { 

     final String result = userService.registrateUser(registrate.getPhoneCode(), registrate.getPhoneNumber(), registrate.getOsType()); 
     return ResponseEntity.ok(result); 
    } 

そしてuserServiceClass内の休憩Controllerクラスを持っている私は、この

registrateUser(String args ...){ 
     Users user = new User(); 
     user.setSmth(smth); 
     userRepository.save(user) 

    } 

私の統合テスト

@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT,classes = GmoikaApiApplication.class) 

    public class GmoikaApiApplicationTests { 

     private MockMvc mockMvc; 
     @Autowired 
     private WebApplicationContext wac; 
     @Before 
     public void setUp(){ 
      this.mockMvc = webAppContextSetup(wac).build(); 
     } 

     @Test 
     public void firstTest() throws Exception { 
      mockMvc.perform(post("https://stackoverflow.com/users/user") 
        .content("my new user")) 
        .andExpect(status().isOk()) 
        .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) 
        .andExpect(jsonPath("$.error",is(0))) 
        .andDo(print()) 
        .andReturn();   
     } 

のようになめらかでしたそして、これは仕事の罰金ですが、私私のデータベースに新しいユーザーがいます。私はテストのためにのみ生産の偽のユーザーを作成したくないです。私の質問はどのように統合テスト内のdbで新しいユーザーの作成を避けるためですか?

+0

テストを使用するdbは 'hsqldb'を意味し、スプリングテストのデフォルトです。あなたはそれを使用することができます。 – sunkuet02

+0

'@ Transactional'と' @ Rollback'を使ってユーザを作成し、DBにロールバックすることができます。 – Brad

答えて

0

私は、その後、あなたのプロジェクトがMavenプロジェクトであることを前提としています

  1. <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>test</scope> </dependency>

  2. のsrc /テスト/リソース/ configにファイルに追加のpom.xmlに以下の依存関係を追加するには似たようなを含むapplication.properties

    spring.datasource.url=jdbc:h2:mem:mytestdb spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.database=H2 spring.jpa.open-in-view=false spring.jpa.show-sql=false spring.jpa.hibernate.ddl-auto=create-drop

+0

また、私のpostgresqlデータソースにapplication.propertiesファイルがあります。このファイルを複製する必要がありますか? –

+0

** application.properties **は、** src/main/resources **または** src/test/resources **にありますか? –

+0

ありがとう、私はそれを見たことがありません –

0

春のフレームワークでプロファイルを作成する必要があります。データベース構成で標準アプリケーション用に1番目、テストアプリケーション用にプロファイルを作成する必要があります。テストでは、h2databaseを使用する必要があります。あなただけのプロジェクトでh2databaseの依存関係を追加し、インストール中に任意のH2データベースには必要ありませんので、H2データベースは、インメモリ・データベースをある

com.h2database でもH2 1.4.194

あなたテストプロファイル

jdbc.driverClassName=org.h2.Driver 
jdbc.url=jdbc:h2:mem:myDb;DB_CLOSE_DELAY=-1 

hibernate.dialect=org.hibernate.dialect.H2Dialect 
hibernate.hbm2ddl.auto=create 
関連する問題