2016-05-18 9 views
1

Ich verwende die DLLs von swisstopo, um Koordinaten aus dem LV03 in das LV95-Format zu migrieren.Verwenden von swisstopo.dll in Komponententests

Ich habe die DLLs von here heruntergeladen.

Das erste, was ich tun wollte, ist einen Komponententest zu schreiben, um die Korrektheit der Migration zu bestätigen. Ich habe die zwei DLL und schrieb die Einheit Test verwiesen:

[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; } 
} 

Leider, wenn ich den Test ausgeführt werden soll, heißt es:

System.IO.FileLoadException: konnte nicht geladen werden die angegebene Datei.

bei swisstopo.geodesy.htrans.CHtrans.ReadData (Single [,] & Daten, String Dateiname)

bei swisstopo.geodesy.htrans.CHtrans.ComputeHtrans (Doppel & Höhe, Doppel Osten, Doppel Norden, HeightTransformation Transformation)

bei swisstopo.geodesy.reframe.Reframe.TransformAltimetry (Doppel & Höhe, Doppel Osten, Doppel Norden, AltimetricFrame altFrameIn, AltimetricFrame altFrameOut)

bei swisstopo.geodesy.reframe.Reframe.ComputeReframe (Doppel & Osten, Doppel & Norden, Doppel & Höhe, PlanimetricFrame plaFrameIn, PlanimetricFrame plaFrameOut, AltimetricFrame altFrameIn, AltimetricFrame altFrameOut)

bei MyProject.Tests.Lv03ToLv95Converter.Convert (Doppel easting, Doppel northing) in C: \ Projects \ MyProject \ sources \ MyProject.Tests \ Lv03ToLv95ConverterTest.cs: Leitung 33

bei MyProject.Tests.Lv03ToLv95ConverterTest.Convert_WhenGivenLv03In_ThenExpectedLv95Out (Doppel givenLv03Easting, Double givenLv03Northing, Double expectedLv95Easting, Double expectedLv95Northing) in C: \ Projects \ MyProject \ sources \ MyProject .Tests \ Lv03ToLv95ConverterTest.cs: Zeile 21

Weiß jemand, was ist das Problem hier? Ich hatte noch nie Probleme Referenzierung und eine dll, bevor Sie ...

Dank im Voraus

Edit: denken wir das Problem sein könnte, dass Reframe Assembly.ExecutingAssembly ruft und suchen nach swisstopo.data usw. in dem Pfad, den es nicht findet, weil die ausführende Baugruppe der Nunit-Runner ist ...

Wir haben versucht, die Baugruppen manuell innerhalb des Tests zu laden, aber leider nicht so gut .

[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

Referenzieren Sie diese wahrscheinlich erforderlichen Baugruppen in Ihrem Testprojekt?Haben Sie für diese Assemblies die Option "Lokal kopieren" auf "True" gesetzt, sodass sie in den Ordner "bin" kopiert werden? –

+0

Ja, ich habe auf die Assemblys im Testprojekt verwiesen und "Local" auf "true" gesetzt – xeraphim

+0

Die Spezifikation für FileLoadException (https://msdn.microsoft.com/en-us/library/system.io.fileloadexception(v=vs. 110) .aspx) sagt, dass es ausgelöst wird, wenn eine verwaltete Assembly gefunden, aber nicht geladen werden konnte. Es sollte Ihnen auch sagen, welche Datei es zu laden versucht. Kannst du bitte für die volle Ausnahme posten? –

Antwort

3

Ich hatte das gleiche Problem mit dem Laden der Baugruppe "swisstopo.data" in NUnit. Für mich hat die Verwendung von MS Test anstelle von NUnit das Problem gelöst. In MS Test ist die ausführende Assembly die Testassembly.

[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); 
    }