Als erstes muss ich sagen, dass ich mich nicht sicher bin, wie ich diese Fragen formulieren soll, da ich neu bei Xamarin bin.Xamarin NUnitLite-Testmethoden: Wie werden geteilte Tests ausgeführt, die auf jeder Plattform ausgeführt werden?
Ich baue eine App in Xamaring mit dem Ziel, Cross Platform zu sein.
Dies sind die Schritte:
- Lösung erstellen
- Neues Projekt Name:
Demo.UI.TestHarness.iOS
, Typ: iOS Unified-Unit-Test App - Neues Projekt Name:
Demo.UnitTests
, Typ: Cross-Platform Tragbarer Bibliothek - Make
Demo.UI.TestHarness.iOS
das Startprojekt - Nuget Paket
NUnitLite
-Demo.UnitTests
hinzufügen
- Verweis hinzufügen zu
Demo.UnitTests
inDemo.UI.TestHarness.iOS
Dies geschieht, habe ich eine Klasse DummyTest in Demo.UnitTests
:
using System;
using NUnit.Framework;
namespace Demo.UnitTests
{
[TestFixture]
public class DummyTest
{
[Test]
public void DUMMY()
{
Assert.True (false);
}
}
}
Und ich in die Datei UnitTestAppDelegate
in Demo.UI.TestHarness.iOS
hinzugefügt einen Verweis auf diese DummyTest
:
using System;
using System.Linq;
using System.Collections.Generic;
using Foundation;
using UIKit;
using MonoTouch.NUnit.UI;
using Demo.UnitTests;
namespace Demo.UI.TestHarness.iOS
{
// The UIApplicationDelegate for the application. This class is responsible for launching the
// User Interface of the application, as well as listening (and optionally responding) to
// application events from iOS.
[Register ("UnitTestAppDelegate")]
public partial class UnitTestAppDelegate : UIApplicationDelegate
{
// class-level declarations
UIWindow window;
TouchRunner runner;
//
// This method is invoked when the application has loaded and is ready to run. In this
// method you should instantiate the window, load the UI into it and then make the window
// visible.
//
// You have 17 seconds to return from this method, or iOS will terminate your application.
//
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
// create a new window instance based on the screen size
window = new UIWindow (UIScreen.MainScreen.Bounds);
runner = new TouchRunner (window);
// register every tests included in the main application/assembly
// runner.Add (System.Reflection.Assembly.GetExecutingAssembly());
runner.Add(typeof(DummyTest).Assembly);
window.RootViewController = new UINavigationController (runner.GetViewController());
// make the window visible
window.MakeKeyAndVisible();
return true;
}
}
}
Jetzt kann ich das Projekt erstellen und die Debugger-Simulation ausführen, aber kein t Die meisten kommen auf.
Wenn stattdessen ich die DummyTest
direkt in meinem Demo.UI.TestHarness.iOS
Projekt hinzufügen und über das Demo.UnitTests
Projekt vollständig vergessen, es läuft wie vorgesehen (aber das ist nicht das, was ich will, weil ich die Tests alle zusammen machen will die gleichen Tests später verwenden für Android und Mac und nicht für jede Plattform neu zu machen).
Normalerweise teile ich meine Tests in tragbare Einheitentests (die wie Ihre 'Demo.UnitTests' klingen), die keine Plattformabhängigkeiten haben. Diese Komponententests laufen mit einer NUnit-Bibliothek (nur auf meinem Dev-Rechner, nicht auf Geräten). Für alles, was vom Gerät abhängig ist, schreibe ich die Komponententests direkt in die Unit-Test-App für iOS (oder eine andere Plattform), da ich einen Test, der von einer bestimmten Plattform abhängt, nicht teilen kann. Auf diese Weise werden meine gemeinsamen Tests sehr schnell und einfach ausgeführt. Dies ist nur meine Entscheidung für einen Test. – dylansturg