2017-08-31 61 views
0

のSAP HANA対SQL Serverを比較する最も重要なのDbUnitを:設定した許容値 -

DBユニットは、行78で、二重値の差を返します:

Exception in thread "main" junit.framework.ComparisonFailure: value (table=dataset, row=78, col=DirtyValue) expected:<49.27291950[7]> but was:<49.27291950[6]> 

だから私は、そのSQL Serverの戻りを想定HANAは49.272919506
を返しながら49.272919507 Iはトーラーを設定しようとしそして

JUnit assertEquals Changes Stringに対する回答に基づきます)よくある質問に応じてatedデルタIs there an equivalent to JUnit's assertEquals(double expected, double actual, double delta) to define a tolerance level when comparing numeric values?

私はまだ同じエラーが表示されます - 任意のアイデア?

追加情報

たぶんこれが理由です:?

[main] WARN org.dbunit.dataset.AbstractTableMetaData - Potential problem found: The configured data type factory 'class org.dbunit.dataset.datatype.DefaultDataTypeFactory' might cause problems with the current database 'Microsoft SQL Server' (e.g. some datatypes may not be supported properly). In rare cases you might see this message because the list of supported database products is incomplete (list=[derby]). If so please request a java-class update via the forums.If you are using your own IDataTypeFactory extending DefaultDataTypeFactory, ensure that you override getValidDbProducts() to specify the supported database products. 
[main] WARN org.dbunit.dataset.AbstractTableMetaData - Potential problem found: The configured data type factory 'class org.dbunit.dataset.datatype.DefaultDataTypeFactory' might cause problems with the current database 'HDB' (e.g. some datatypes may not be supported properly). In rare cases you might see this message because the list of supported database products is incomplete (list=[derby]). If so please request a java-class update via the forums.If you are using your own IDataTypeFactory extending DefaultDataTypeFactory, ensure that you override getValidDbProducts() to specify the supported database products. 
  • DbUnitをバージョン2.5.4
  • DirtyValueは、両方のシステムで3重バレスから計算される

SQL Serverの

SELECT TypeOfGroup, Segment, Portfolio, UniqueID, JobId, DirtyValue, PosUnits, FX_RATE, THEO_Value 
FROM DATASET_PL 
order by JobId, TypeOfGroup, Segment, Portfolio, UniqueID COLLATE Latin1_General_bin 

HANA

SELECT "TypeOfGroup", "Segment", "Portfolio", "UniqueID", "JobId", "DirtyValue", Pos_Units as "PosUnits", FX_RATE, THEO_Value as "THEO_Value" 
FROM "_SYS_BIC"."meag.app.h4q.metadata.dataset.pnl/06_COMPARE_CUBES_AND_CALC_ATTR" 
order by "JobId", "TypeOfGroup", "Segment", "Portfolio", "UniqueID" 
+0

テスト定義と使用しているDBユニットのバージョンを指定できますか?また、関連するデータ定義は、その相違点の原因を理解するのに役立ちます。最終的には、 'double'の実装に関係なく、両方のプラットフォームで同じ結果を得たいと思うかもしれません。 –

答えて

0

回避策

diffhandlerを使用して、そこの違いハンドル:「?任意のアイデア」という質問だった

DiffCollectingFailureHandler diffHandler = new DiffCollectingFailureHandler(); 
Assertion.assertEquals(expectedTable, actualTable); 

List<Difference> diffList = diffHandler.getDiffList(); 
for (Difference diff: diffList) { 
    if (diff.getColumnName().equals("DirtyValue")) { 
     double actual = (double) diff.getActualValue(); 
     double expected = (double) diff.getExpectedValue(); 
     if (Math.abs(Math.abs(actual) - Math.abs(expected)) > 0.00001) { 
      logDiff(diff); 
     } else { 
      logDebugDiff(diff); 
     } 
    } else { 
     logDiff(diff); 
    } 
} 

private void logDiff(Difference diff) { 
    logger.error(String.format("Diff found in row:%s, col:%s expected:%s, actual:%s", diff.getRowIndex(), diff.getColumnName(), diff.getExpectedValue(), diff.getActualValue())); 
} 

private void logDebugDiff(Difference diff) { 
    logger.debug(String.format("Diff found in row:%s, col:%s expected:%s, actual:%s", diff.getRowIndex(), diff.getColumnName(), diff.getExpectedValue(), diff.getActualValue())); 
} 
0

を、ので、多分それは差がoccurrs理由を理解するのに役立ちます。

必要に応じてHANAが切り詰められます("HANA SQL and System Views Reference", numeric typesを参照)。 HANAでは123.45で、次のステートメントの結果:必要に応じて

select cast('123.456' as decimal(6,2)) from dummy; 

SQL-Serverのラウンドは、ターゲット・データ・タイプが数値であれば、少なくとも、例えば見ますhereの "切り捨てと丸め結果"にあります。 上記のSQL文と同じSQL-Serverの123.46が返されます。

SQL標準では、丸めようと切り捨てるかどうかにかかわらず、開いているようです。answer on SOを参照してください。 HANAでの丸め動作を変更する設定はありませんが、おそらくあります。

+0

これは、THXの理由に関する有用な情報です。しかし、DbUnitに差異を無視させる方法は、.00001 –

+0

よりも小さく、絶対イプシロンは0です。00001と比較すると、精度が低い場合に同じ問題に遭遇するデルタを比較することができますが、それはあなたとは無関係かもしれません。 –

関連する問題