Ho la seguente classe e test. Voglio testare il passaggio di un valore null come parametro al costruttore e mi aspetto un ArgumentNullException
. Ma dal momento che utilizzo il metodo CreateAnonymous
dell'Autofixture, ho invece un TargetInvocationException
.Test di autofirmazione per parametro costruttore non valido
Qual è il modo corretto di scrivere questo tipo di test?
public sealed class CreateObject : Command {
// Properties
public ObjectId[] Ids { get; private set; }
public ObjectTypeId ObjectType { get; private set; }
public UserId CreatedBy { get; private set; }
// Constructor
public CreateObject(ObjectId[] ids, ObjectTypeId objectType, UserId createdBy) {
Guard.NotNull(ids, "ids");
Guard.NotNull(objectType, "objectType");
Guard.NotNull(createdBy, "createdBy");
Ids = ids;
ObjectType = objectType;
CreatedBy = createdBy;
}
}
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void constructor_with_null_ids_throw() {
fixture.Register<ObjectId[]>(() => null);
fixture.CreateAnonymous<CreateObject>();
}
Farei convalide di questo tipo di clausola Guard a un livello superiore. Vedere http://stackoverflow.com/a/11455580/11635. Inoltre, ['ExpectedExceptionAttribute' è una cattiva idea - se non puoi usare xUnit almeno usa qualche forma di' Assert.Throws'] (http://stackoverflow.com/a/113616/11635) (Sì, non ne so nè di questi confrontano la tua domanda riguardo a "TargetInvocationException" che è il motivo per cui non si tratta di una risposta, ma il primo passo è quello di spostare per chiarire il codice in modo da poter lavorare con esso - anche se questo è un bug, ti consigliamo di produrre una risposta più chiara e una soluzione temporanea per il provvisorio –