2

ElConditionEntityAlertTemplateEntity、およびAlertEntitiesAssertionsの3 つのクラスがあります。

AlertTemplateEntity は、データベース内のテーブルに対応します。ElConditionEntity は AlertTemplateEntity クラスの埋め込みファイルです。

AlertEntitiesAssertions は、テスト ケース クラスのオブジェクト インスタンスを設定するためのヘルパー クラスです。

Eclipseでテストケースを実行するたびに、例外なくテスト ケースに合格できます。

ただし、build.xml で始まるコマンド ラインでテスト ケースを実行すると、java.lang. ElConditionEntity クラスの setExpression メソッドによるNoSuchMethodError例外。さらに、エラースタックをトレースすると、setExpression メソッドの上に、プロジェクトで定義していないメソッドがいくつかあります。そして、それらのエラースタックには行番号がありません。

これが原因で失敗したテストケースがたくさんあります。

簡略化されたコードは次のとおりです。

@Entity
@Table(name="alert_templates")
public class AlertTemplateEntity {

         @Column(name="type",nullable=false)
         @Basic(optional=false)
         private GgsObjectType objectType;

         @Basic(optional=false)
         private Severity severity;

         private ELConditionEntity condition;

         @OneToMany(cascade=CascadeType.ALL,mappedBy="alertTemplate")
         private List<AlertEntity> alerts = new ArrayList<AlertEntity>();

         @Basic(optional=false)
         @Column(name="suppression_time")
         private int suppressionTime;

         @Column(name="message_template", length=4000)
         private String messageTemplate;

         ..................
} 

 @Embeddable
 public class ELConditionEntity  {

   @Basic(optional=false)
   @Column(length=4000)
   private String expression;

   @Column(name="expression_template",length=4000)
   private String template;

   public String getExpression() {
     return expression;
   }

   public String getStringTemplate() {
     return template;
   }

   public void setExpression(String expression) {
     this.expression = expression;
   }
   ...........

 }

public class AlertEntitiesAssertions{

     public static final String EL_EXPRESSION = "${value==111}";
     public static final String EL_STRING_TEMPLATE = "${value} == 111";

    public static AlertTemplateEntity newTemplate(boolean withSubscription) {

        final AlertTemplateEntity template = new AlertTemplateEntity();
        template.setObjectType(TYPE);
        template.setName(NAME);
        template.setSeverity(SEVERITY);
        template.setSuppressionTime(SUPPRESSION_TIME);
        final ELConditionEntity condition = newCondition();
        template.setCondition(condition);
        ..........................
      }


   public static ELConditionEntity newCondition() {

         final ELConditionEntity condition = new ELConditionEntity();
         condition.setExpression(EL_EXPRESSION);
         condition.setStringTemplate(EL_STRING_TEMPLATE);
         return condition;
      }

    }

エラー スタック:

  [testng] FAILED: testSaveTemplateWithSubscription
  [testng] java.lang.NoSuchMethodError: com.backend.jpa.model.alert.ELConditionEntity._persistence_propertyChange(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  [testng]     at com.backend.jpa.model.alert.ELConditionEntity._persistence_set_expression(ELConditionEntity.java)
  [testng]     at com.backend.jpa.model.alert.ELConditionEntity.setExpression(ELConditionEntity.java:45)
  [testng]     at com.backend.jpa.model.alert.AlertEntitiesAssertions.newCondition(AlertEntitiesAssertions.java:83)
  [testng]     at com.backend.jpa.model.alert.AlertEntitiesAssertions.newTemplate(AlertEntitiesAssertions.java:58)
  [testng]     at com.backend.jpa.model.alert.AlertEntitiesMappingTest.testSaveTemplateWithSubscription(AlertEntitiesMappingTest.java:106)
  [testng] ... Removed 27 stack frames

アラート テーブルの構造:

CREATE TABLE alert_templates (
  ID NUMBER(10) NOT NULL, 
  message_template LONG NULL, 
  SEVERITY NUMBER(10) NULL, 
  suppression_time NUMBER(10) NULL, 
  type NUMBER(10) NOT NULL, 
  NAME VARCHAR2(255) NULL UNIQUE, 
  expression_template CLOB NULL, 
  EXPRESSION CLOB NULL, 
  PRIMARY KEY (ID)
);
4

0 に答える 0