c'è un modo per condividere le asserzioni tra le classi di test senzaEreditarietàin NUnit?
Considerando che si desidera condividere affermazioni e si sta testando per i comportamenti sulle interfacce, si può solo creare qualcosa di semplice:
public interface IBehavior
{
void Check();
}
public class VehicleThatHasBeenStartedBehaviors : IBehavior
{
protected IVehicle vehicle;
public VehicleThatHasBeenStartedBehaviors(IVehicle vehicle)
{
this.vehicle = vehicle;
}
public void Check()
{
Assert.That(vehicle.IsEngineRunning, Is.True);
Assert.That(vehicle.RevCount, Is.LessThanOrEqualTo(1000));
Assert.That(vehicle.RevCount, Is.GreaterThanOrEqualTo(0));
}
}
[TestFixture]
public class when_starting_a_car
{
protected Car car;
[SetUp]
public void SetUp()
{
car = new Car();
}
[Test]
public void behaves_like_a_started_vehicle()
{
new VehicleThatHasBeenStartedBehaviors(car).Check();
}
}
MA, se si desidera utilizzare la sintassi specificamente MSpec, credo potrebbe essere necessario implementarlo o trovare qualche framework che lo faccia per te.
EDIT
leggere i vostri commenti sulla questione mi sono reso conto che si può mancare a riutilizzare i metodi di prova, e non semplicemente asserzioni. In questo caso, puoi scrivere un customized addin for NUnit. Potrebbe sembrare un po 'eccessivo, ma sta a te decidere.
Il mio punto di partenza sarebbe scrivendo un SuiteBuilder oggetto personalizzato:
Scopo
Un SuiteBuilder è un componente aggiuntivo utilizzato per costruire un dispositivo di prova da un tipo. NUnit utilizza un SuiteBuilder per riconoscere e creare TestFixtures.
Utilizzando il proprio generatore di suite è possibile leggere alcune classi di comportamento e comporre il proprio dispositivo.
[NUnitAddin]
public class TestCompositionAddinProvider : IAddin
{
#region IAddin Members
public bool Install(IExtensionHost host)
{
IExtensionPoint builders = host.GetExtensionPoint("SuiteBuilders");
if (builders == null)
return false;
builders.Install(new TestCompositionSuiteBuilder());
return true;
}
#endregion
}
public class TestCompositionSuiteBuilder : ISuiteBuilder
{
#region ISuiteBuilder Members
public bool CanBuildFrom(Type type)
{
//TODO: Create validation logic
return true;
}
public NUnit.Core.Test BuildFrom(Type type)
{
if (CanBuildFrom(type))
return new ComposedSuiteExtension(type);
return null;
}
#endregion
}
public class ComposedSuiteExtension : TestSuite
{
public ComposedSuiteExtension(Type fixtureType)
: base(fixtureType)
{
//TODO: Create logic to add test methods from various behaviors.
}
}
fonte
2013-01-16 12:45:32
vuoi dire due test in esecuzione contemporaneamente? O qualche tipo di verifica che viene eseguita per due test? Avete un esempio di codice o un collegamento a uno che utilizza questa funzionalità? –
Voglio avere 1 classe con asserzioni incluse in un'altra classe. Non posso usare l'ereditarietà. Esempio. http://lostechies.com/jamesgregory/2010/01/18/behaviours-in-mspec/ – ptomasroos