2016-05-18 38 views
5

Provare a eseguire test scritti in una normale libreria PCL utilizzando NUNit. È solo un progetto vuoto, con un singolo test che non fa nulla.NUnit per prove di librerie di classi portatili

NUnit console corridore mostra un messaggio

Il driver NUnit 3.0 non supporta la versione portatile di NUnit. Utilizzare un corridore specifico per piattaforma.

e ReSharper corridore si blocca con il messaggio

unit test Runner non è riuscito a eseguire i test

e una traccia dello stack:

at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) 
    at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
    at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, StackCrawlMark& stackMark) 
    at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) 
    at System.Activator.CreateInstance(String assemblyString, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityInfo, StackCrawlMark& stackMark) 
    at System.Activator.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityInfo) 
    at System.AppDomain.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityAttributes) 
    at System.AppDomain.CreateInstanceAndUnwrap(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityAttributes) 
    at NUnit.Engine.Drivers.NUnit3FrameworkDriver.Load(String testAssemblyPath, IDictionary`2 settings) 
    at NUnit.Engine.Runners.DirectTestRunner.LoadPackage() 
    at NUnit.Engine.Runners.AbstractTestRunner.Load() 
    at NUnit.Engine.Runners.MasterTestRunner.LoadPackage() 
    at NUnit.Engine.Runners.AbstractTestRunner.EnsurePackageIsLoaded() 
    at NUnit.Engine.Runners.MasterTestRunner.NUnit.Engine.ITestRunner.Explore(TestFilter filter) 
    at JetBrains.ReSharper.UnitTestRunner.nUnit30.BuiltInNUnitRunner.<>c__DisplayClass1.<RunTests>b__0() in c:\Build Agent\work\10282fe47e6c6213\Psi.Features\UnitTesting\nUnit\Runner30\Src\BuiltInNUnitRunner.cs:line 79 
    at JetBrains.ReSharper.UnitTestRunner.nUnit30.BuiltInNUnitRunner.WithExtensiveErrorHandling(IRemoteTaskServer server, Action action) in c:\Build Agent\work\10282fe47e6c6213\Psi.Features\UnitTesting\nUnit\Runner30\Src\BuiltInNUnitRunner.cs:line 623 

Secondo this commento PCL dovrebbe lavoro, ma non è così. Se stiamo usando PCL senza Xamarin quali sono le opzioni per eseguire i test?

risposta

6

Per eseguire test portatili, è necessario utilizzare NUnitLite per creare un runner di prova autoeseguibile. Fondamentalmente, si crea un'applicazione di console .NET 4.5.x, si fa riferimento a NUnitLite e al proprio assieme di test. Quindi eseguire l'applicazione console per eseguire i test. Vedere i passaggi Testing .NET Core using NUnit 3 tranne per il fatto che utilizza .NET Core anziché .NET 4.5 per eseguire i test.

Se l'assembly che si sta testando è PCL ma ha come destinazione .NET 4.5, un approccio più semplice consiste nel creare il proprio assieme di test come .NET 4.5.x e fare riferimento all'assembly PCL sotto test. In questo modo i test faranno riferimento alla versione completa del framework NUnit e ti permetteranno di eseguire i tuoi test in Visual Studio o con Resharper. Solo perché il codice su cui stai lavorando è PCL, ciò non significa che i tuoi test debbano essere PCL.

Problemi correlati