2016-04-24 8 views
1

以下のアセンブラの単体テストを書こうとしていますが、引き続き取得しますRequestContextHolder経由で現在のリクエストを見つけることができませんでした。これはSpringのMVCハンドラから呼び出されていますか?。私はリソースの作成をどうやって模倣できるのか知りたかったのですが?Spring HateosでResourceAssembler用のmockitoテストケースを作成するにはどうすればいいですか?

@Component 
    public class LoginResourceAssembler extends ResourceAssemblerSupport<User, ResourceSupport> { 

     public LoginResourceAssembler() { 

      super(User.class, ResourceSupport.class); 
     } 

     @Override 
     public ResourceSupport toResource(User user) { 

      ResourceSupport resource = new ResourceSupport(); 
      final String id = user.getId(); 

      resource.add(linkTo(MyAccountsController.class).slash(id).slash("accounts").withRel("accounts")); 

      return resource; 
     } 

    } 

答えて

3

私はRequestContextHolderを介して電流の要求が見つかりませんでしたエラーを見ていました。これはSpring MVCハンドラから呼び出されていますか?私のテストクラスに@RunWith(MockitoJUnitRunner.class)というアノテーションが付けられていて、コントローラに注入されていないからです。 は、このエラーを修正するには、私は、IMOの統合テスト(の特定の依存に無地のユニットテストからの変更の

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
@WebAppConfiguration 

public class LoginResourceAssemblerTest { 

    @Autowired 
    private WebApplicationContext context; 

    private MockMvc mockMvc; 

    @InjectMocks 
    private LoginResourceAssembler loginResourceAssembler; 

    @Before 
    public void setUp() { 

     initMocks(this); 
     this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context).build(); 
    } 

    @Test 
    public void testToResource() { 
     User user = new User(); 
     user.setId("1234"); 
     ResourceSupport resource = loginResourceAssembler.toResource(user); 
     assertEquals(1,resource.getLinks().size()); 
     assertEquals("accounts",resource.getLinks().get(0).getRel()); 
       assertTrue(resource.getLinks().get(0).getHref().contains("accounts")); 

    } 

} 
3

代わりに、私の場合には

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
@WebAppConfiguration 

作業テストケースで私のテストケースを注釈付き春のフレームワーク)のような何かをすることができます:

@RunWith(MockitoJUnitRunner.class) 
public class LoginResourceAssemblerTest { 
    @InjectMocks 
    private LoginResourceAssembler loginResourceAssembler; 

    @Before 
    public void setup() { 
     RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(new MockHttpServletRequest())); 
    } 

    @Test 
    public void testToResource() { 
     //... 
    } 
} 
関連する問題