http://example.com/someUri
webclient を使用してサードパーティの URL (たとえば.
webclient のテストケースを書くのは初めてです。そこで@SprintBootTestを使用しました。API呼び出しをモックすることでサードパーティのApi呼び出しでWebクライアントをテストし、それをローカルURL(url(http://localhost:{portNumber} / someUri)を使用する)に呼び出す方法が2つあることがわかりました私のテスト プロパティ ファイルから: src/test/resources/application.properties) ここで、実際のクライアントへの見返りとして、いくつかの mockedResponse が返されます。
- ワイヤーモックの使用
- MockWebServer の使用
理解を深めるために上記のコードを検討してください。
@Service
Class SampleService{
@Value("${sample.url}")
private String sampleUrl;
public String dummyClient() {
String sample =webClient.get()
.uri(sampleUrl)
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.retrieve()
.bodyToMono(String.class)
.block();
return sample;
}
}
アプリケーション-dev.properties:
sample.url:http://example.com/someUri
ソース/テスト/リソース/application.properties:
http://localhost:8090/someUri
テスト クラス:
@SpringBootTest
public class sampleTestingClass {
@Autowired
private SampleService sampleService;
@Value("${sample.url}")
private String sampleUrl;
public static MockWebServer mockWebServer = new MockWebServer();
@BeforeAll
static void setUp() throws IOException {
mockWebServer.start(8090);
}
@AfterAll
static void tearUp() throws IOException {
mockWebServer.close();
}
HttpUrl url = mockWebServer.url("/someUri");
mockWebServer
.enqueue(
new MockResponse()
.setResponseCode(200)
.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.setBody("Sample Successful"));
String sample = sampleService.dummyClient();
assertEquals(sample ,matches("Sample Successful"));
}
}
しかし、このコードは機能していません。上記のエラーが表示されます:
java.lang.NullPointerException
モックされた URL を使用して単体テストを実行するためにこれを修正する方法を誰かが知っていれば、本当に役に立ちますか? 前もって感謝します!