相关疑难解决方法(0)

如何模拟REST模板交换?

我有一项服务,我需要通过休息询问外部服务器以获取一些信息:

public class SomeService {

    public List<ObjectA> getListofObjectsA() {
        List<ObjectA> objectAList = new ArrayList<ObjectA>();
        ParameterizedTypeReference<List<ObjectA>> typeRef = new ParameterizedTypeReference<List<ObjectA>>() {};
        ResponseEntity<List<ObjectA>> responseEntity = restTemplate.exchange("/objects/get-objectA", HttpMethod.POST, new HttpEntity<>(ObjectAList), typeRef);
        return responseEntity.getBody();
    }
}
Run Code Online (Sandbox Code Playgroud)

我该如何编写JUnit测试getListofObjectsA()

我试过以下:

@RunWith(MockitoJUnitRunner.class)
public class SomeServiceTest {
    private MockRestServiceServer mockServer;

    @Mock
    private RestTemplate restTemplate;

    @Inject
   private SomeService underTest;

@Before
public void setup() {
    mockServer = MockRestServiceServer.createServer(restTemplate);
    underTest = new SomeService(restTemplate);
    mockServer.expect(requestTo("/objects/get-objectA")).andExpect(method(HttpMethod.POST))
            .andRespond(withSuccess("{json list response}", MediaType.APPLICATION_JSON));
}

    @Test
    public void testGetObjectAList() {
    List<ObjectA> res = underTest.getListofObjectsA();
    Assert.assertEquals(myobjectA, …
Run Code Online (Sandbox Code Playgroud)

java junit mockito spring-boot

23
推荐指数
5
解决办法
6万
查看次数

理解单一责任原则

我很困惑如何确定单个方法是否有一个责任,就像清洁代码一书中的以下代码一样

public Money calculatePay(Employee e) throws InvalidEmployeeType {
        switch (e.type) {
            case COMMISSIONED:
                return calculateCommissionedPay(e);
            case HOURLY:
                return calculateHourlyPay(e);
            case SALARIED:
                return calculateSalariedPay(e);
            default:
                throw new InvalidEmployeeType(e.type);
        }
    }
Run Code Online (Sandbox Code Playgroud)

正如作者在这段代码中所说的那样:"...... 显然不止一件事.第三,它违反了单一责任原则(SRP),因为改变它的原因不止一个. " 乍一看我的代码我在想这个方法是如何违反SRP的,因为如果代码发生了变化,只有当有一个添加的员工类型但是我试图理解方法时才会成为switch语句我进一步想出了为什么它违反了上述原则.

我的假设是,因为方法的名称是这个方法calculatePay(Employee e)的唯一责任是支付计算,因为方法的名称建议但是因为在方法内部有一个过滤过滤Employee的类型,这个过滤现在是不同的或因此,另一项责任违反了SRP.我不知道我是否做对了.

java design-patterns single-responsibility-principle

7
推荐指数
2
解决办法
791
查看次数

Junit Mockito在Spring集成框架中为ResponseEntity <?>测试案例

我想嘲笑外部电话.

 ResponseEntity<?> httpResponse = requestGateway.pushNotification(xtifyRequest);
Run Code Online (Sandbox Code Playgroud)

requestGateway是一个界面.

public interface RequestGateway
{
ResponseEntity<?> pushNotification(XtifyRequest xtifyRequest);
}
Run Code Online (Sandbox Code Playgroud)

以下是我正在尝试的测试方法.

 @Test
public void test()
{


    ResponseEntity<?> r=new ResponseEntity<>(HttpStatus.ACCEPTED);

    when(requestGateway.pushNotification(any(XtifyRequest.class))).thenReturn(r);
}
Run Code Online (Sandbox Code Playgroud)

上面的when语句中存在编译错误,称其为无效类型.甚至thurgg类型为ResponseEntity.

有谁可以帮我解决这个问题?

junit spring-integration mockito

6
推荐指数
1
解决办法
2万
查看次数