3

私は働いています:

  • スポック・コア
  • スポックレポート
  • スポックスプリング
  • Spring MVC テスト

そして、私は次のコードを持っています:

def "findAll() Expected"(){

    given: "The URL being used is: /personas/xml/personas"

        url = PersonaUrlHelper.FINDALL;

    when: "When the URL is being calling with a GET"

        resultActions = mockMvc.perform(get(url)).andDo(print())

    then: "something..."

        resultActions.andExpect(status().isOk())
                     .andExpect(content().contentType(RequestMappingProducesJsonUtf8.PRODUCES_JSON_UTF_8))

}

2 つの観察:

1 : given: "The URL being used is: /personas/xml/personas"URL/URI 値が手動で追加された場所を確認します。

2 :url変数は、多くのテスト メソッドで共通であるため、インスタンス変数として定義されています。したがってdef String url

私の質問は:

Spocklabel/blockurlに変数を表示するにはどうすればよいですか? どのように(与えられたので…)?Spock Reportsを通じて印刷し、テスト ドキュメントを改善します。

以下を読みました: Spocklight: Unroll の追加データ変数の説明

@Unrollを回避します。whereしかし、ラベル/ブロックを回避するすべての作業に気付きました。

私はすでに次のようなことを試しました:

given: "The URL being used is: $url"
given: "The URL being used is: ${url}"

そして機能しません

次のような構文で回避したい:

def "findAll() Expected"(){

    url = PersonaUrlHelper.FINDALL;

    given: "The URL being used is: $url"

        …. something

    when: "When the URL is being calling with a GET"

では、正しい構成は何でしょうか?

PersonaUrlHelper.FINDALL一部のSpring@RequestMappingとこのテストメソッドで使用されるリファクタリングを行うとします。givenラベル/ブロックのテキストを手動で更新したくない

では、正しい構文は何ですか?

4

1 に答える 1

2

素早い回答:

where-block アプローチが正しいと思います。次のようなものを使用します

where: "When the URL is being calling with a GET"
  url << PersonaUrlHelper.FINDALL

そしてurl、テストから の定義を削除します。urlブロックで定義されているため、変数を使用できますwhere。そして、テストの説明から次のように参照できます#url

@Unroll
def "findAll() Expected"(){
    given: "The URL being used is: #url"
        //removed url definition
    when: "When the URL is being calling with a GET"
        resultActions = mockMvc.perform(get(url)).andDo(print())
    then: "something..."
        resultActions.andExpect(status().isOk())
                 .andExpect(content().contentType(RequestMappingProducesJsonUtf8.PRODUCES_JSON_UTF_8))
    where: "When the URL is being calling with a GET"
        url << [PersonaUrlHelper.FINDALL]
}

もう 1 つのハックな方法は、url単に a を介してprintln url出力することです。この出力も afaik でキャプチャされますが、それほど適切ではありません。

更新:次の spock コンソール スクリプトをご覧ください: https://meetspock.appspot.com/script/5146767490285568 :

import spock.lang.*

class PersonalUrlHelper {
  final static String FINDALL = 'http://example.com'
}

class MyFirstSpec extends Specification {
  @Unroll
  def "findAll() Expected #url "(){
    given:"The URL being used is: #url"        
    when: "When URL (#url) is assigned to a"        
      def a = url    
    then: "a equals the URL (#url)"        
      a == url
    where: "the URL is fetched from another class or map in this case"        
      url << [PersonalUrlHelper.FINDALL]
  }
}

私はあなたのスクリプトをモックしようとしました - あなたのコードなしで。

ご覧のとおり、URL の内容がテスト名に出力されます。私の知る限り、スポックレポートを介して印刷すると、さまざまなテストブロックのテキストにも反映されます。

ところで:[]返された文字列を1つの要素を持つリストに変換するため、これらは重要です。それ以外の場合、文字列は lsit として解釈され、テストは各文字に対して繰り返されます。

これは役に立ちますか?

于 2015-11-23T07:27:00.667 に答える