2016-05-18 8 views
1

私はswisstopoのdllを使ってLV03からLV95形式へ座標を移行しています。ユニットテストでswisstopo.dllを使用する

私はhereからdllをダウンロードしました。

最初にやりたいことは、移行の正確性を確認するための単体テストを書くことです。 私は2つのDLLのを参照してユニットテストを書いてきました。残念ながら

[TestFixture] 
public class Lv03ToLv95ConverterTest 
{ 
    [Test] 
    [TestCase(600000, 200000, 2600000.0, 1200000.0)] 
    public void Convert_WhenGivenLv03In_ThenExpectedLv95Out(double givenLv03Easting, double givenLv03Northing, double expectedLv95Easting, double expectedLv95Northing) 
    { 
     var actualLv95 = Lv03ToLv95Converter.Convert(givenLv03Easting, givenLv03Northing); 
     actualLv95.Easting.ShouldBeEquivalentTo(expectedLv95Easting); 
     actualLv95.Northing.ShouldBeEquivalentTo(expectedLv95Northing); 
    } 
} 

public static class Lv03ToLv95Converter 
{ 
    public static Lv95 Convert(double easting, double northing) 
    { 
     var reframe = new Reframe(); 
     var height = 0.0; 
     reframe.ComputeReframe(
      ref easting, 
      ref northing, 
      ref height, 
      Reframe.PlanimetricFrame.LV03_Civil, 
      Reframe.PlanimetricFrame.LV95, 
      Reframe.AltimetricFrame.LN02, 
      Reframe.AltimetricFrame.LHN95); 

     return new Lv95(easting, northing); 
    } 
} 

public class Lv95 
{ 
    public Lv95(double easting, double northing) 
    { 
     this.Easting = easting; 
     this.Northing = northing; 
    } 

    public double Easting { get; private set; } 

    public double Northing { get; private set; } 
} 

、私はテストを実行したいとき、それは言う:

System.IO.FileLoadExceptionを:読み込めませんでした。指定されたファイル。 swisstopo.geodesy.htrans.CHtrans.ComputeHtrans(ダブル&高さ、ダブル東、ダブル北、でswisstopo.geodesy.htrans.CHtrans.ReadData(シングル[、] &データ、文字列のファイル名)

swisstopo.geodesy.reframe.Reframe.ComputeReframeでHeightTransformation変換)swisstopo.geodesy.reframe.Reframe.TransformAltimetryで

(ダブル&高さ、ダブル東、ダブル北、AltimetricFrame altFrameIn、AltimetricFrame altFrameOut)

(ダブル&東、ダブル&北、ダブル&高さ、PlanimetricFrame plaFrameIn、PlanimetricFrame plaFrameOut、AltimetricFrame altFrameIn、AltimetricFrame altFrameOut)CでMyProject.Tests.Lv03ToLv95Converter.Convertで

(ダブル東距、ダブル北距):\プロジェクト\ MyProjectと\ソース\ MyProject.Tests Lv03ToLv95ConverterTest.cs \ライン33

CでMyProject.Tests.Lv03ToLv95ConverterTest.Convert_WhenGivenLv03In_ThenExpectedLv95Out(ダブルgivenLv03Easting、ダブルgivenLv03Northing、ダブルexpectedLv95Easting、ダブルexpectedLv95Northing)において:プロジェクト\ \ MyProjectのソース\ \ MyProjectと.Tests \ Lv03ToLv95ConverterTest.cs:line 21

ここで何が問題なのか誰も知っていますか? 私は事前に...

感謝を参照して前にDLLを使用して問題を持っていたことがありません

編集:我々はリフレームはAssembly.ExecutingAssemblyを呼び出して、探している、問題があることができると思いswisstopo.dataなどは見つからないパスにあります。実行中のアセンブリがnunitランナーであるためです...

テスト内でアセンブリを手動で読み込もうとしましたが、残念ながらうまくいきませんでした。

[Test] 
    [TestCase(600000, 200000, 2600000.0, 1200000.0)] 
    public void Convert_WhenGivenLv03In_ThenExpectedLv95Out(double givenLv03Easting, double givenLv03Northing, double expectedLv95Easting, double expectedLv95Northing) 
    { 
     AppDomain.CurrentDomain.Load("swisstopo.data"); 
     AppDomain.CurrentDomain.Load("swisstopo.reframelib"); 
     var actualLv95 = Lv03ToLv95Converter.Convert(givenLv03Easting, givenLv03Northing); 
     actualLv95.Easting.ShouldBeEquivalentTo(expectedLv95Easting); 
     actualLv95.Northing.ShouldBeEquivalentTo(expectedLv95Northing); 
    } 
+0

これらの必要なアセンブリは、テストプロジェクトで参照していますか?これらのアセンブリに対して[ローカルにコピー]を設定してbinフォルダにコピーしましたか? –

+0

はいテストプロジェクトのアセンブリを参照し、コピーローカルをtrueに設定しました。 – xeraphim

+0

FileLoadExceptionの仕様(https://msdn.microsoft.com/en-us/library/system.io.fileloadexception(v=vs)。 110).aspx)は、管理されたアセンブリが見つかりましたが、ロードできなかった場合にスローされると言っています。また、どのファイルを読み込もうとしたのかを伝える必要があります。あなたは完全な例外のために投稿できますか? –

答えて

3

「swisstopo.data」アセンブリをNUnitに読み込むのと同じ問題がありました。 私の場合、NUnitの代わりにMS Testを使用することで問題は解決しました。 MS Testでは、実行中のアセンブリがテストアセンブリです。

[TestMethod] 
    public void Convert_WhenGivenLv03In_ThenExpectedLv95Out() 
    { 
     double givenLv03Easting = 600100, givenLv03Northing = 200100, expectedLv95Easting = 2600100.08309925, expectedLv95Northing = 1200100.06755549; 
     var executingAssembly = Assembly.GetExecutingAssembly().FullName; 
     Console.WriteLine(executingAssembly); 

     var actualLv95 = Lv03ToLv95Converter.Convert(givenLv03Easting, givenLv03Northing); 

     actualLv95.Easting.Should().BeApproximately(expectedLv95Easting, 0.00001); 
     actualLv95.Northing.Should().BeApproximately(expectedLv95Northing, 0.00001); 
    } 
関連する問題