0

我已经在客户端和服务器之间进行了有效的通信(通过 REST)。现在我想添加合同测试。

合约定义如下:

package contracts.node

import org.springframework.cloud.contract.spec.Contract

Contract.make {
  request {
    method 'POST'
    url '/sample'
    multipart(
        [
            script   : named(
                name: value(consumer(regex(nonEmpty())), producer('script name')),
                content: value(consumer(regex(nonEmpty())), producer('script content'))),
            params   : named(
                name: value(consumer(regex(nonEmpty())), producer('params name')),
                content: value(consumer(regex(nonEmpty())), producer('params content'))),
            metadata : named(
                name: value(consumer(regex(nonEmpty())), producer('metadata name')),
                content: value(consumer(regex(nonEmpty())), producer('metadata content'))),
            documents: named(
                name: value(consumer(regex(nonEmpty())), producer('documents name')),
                content: value(consumer(regex(nonEmpty())), producer('documents content')))
        ]
    )

    headers {
      contentType('multipart/form-data')
    }
  }
  response {
    status 200
  }
}

生成的测试如下:

// omitted imports

@SuppressWarnings("rawtypes")
public class NodeTest extends NodeBase {

    @Test
    public void validate_shouldRunScripts() throws Exception {
        // given:
            RequestSpecification request = given()
                    .header("Content-Type", "multipart/form-data")
                    .multiPart("script", "script name", "script content".getBytes())
                    .multiPart("params", "params name", "params content".getBytes())
                    .multiPart("metadata", "metadata name", "metadata content".getBytes())
                    .multiPart("documents", "documents name", "documents content".getBytes());


        // when:
            Response response = given().spec(request)
                    .post("/sample");

        // then:
            assertThat(response.statusCode()).isEqualTo(200);
    }

}

它不能在我的服务器上正常工作。

但是,如果我将multiPart()行更改为这些(删除第二个参数并摆脱.getBytes()):

.multiPart("script", "script content")
.multiPart("params", "params content")
.multiPart("metadata", "metadata content")
.multiPart("documents", "documents content");

它就像一个魅力。

如何编写合同以使用带有两个参数的 multiPart() 生成测试?

4

0 回答 0