c# nunit testcasesource

c# - NUnit TestCaseSource



(3)

Estoy teniendo un ir con el atributo TestCaseSource. Un problema: cuando la cadena sourceName no es válida, la prueba simplemente se ignora en lugar de fallar. Esto sería realmente malo si se cambia el nombre del método de origen, la cadena sourceName no se actualiza y, a continuación, se pierde la cobertura proporcionada por la prueba. ¿Hay alguna manera de cambiar el comportamiento de NUnit, para que la prueba falle si el nombre de origen no es válido?


¿Qué hay de usar la función nameof introducida en C # 6?

public static class TestCasesData { public static string[] TestStringsData() { return new string[] {"TEST1", "TEST2"}; } } [TestFixture] public class MyTest { [Test] [TestCaseSource(typeof(TestCasesData), nameof(TestCasesData.TestStringsData))] public void TestCase1(...) { } }


Esto se resuelve en NUnit 2.6.2. Hay un nuevo constructor para el atributo que toma un Type (que debe implementar IEnumerable ); se "recomienda su uso con preferencia a otras formas porque no utiliza una cadena para especificar el origen de los datos y, por lo tanto, es más fácil de refaccionar". (De la documentation .)

Esto requiere que su corredor de prueba sea compatible con la última NUnit.

Un ejemplo muy básico (ver el enlace de documentación anterior para más detalles):

public class TestDataProvider : IEnumerable { public IEnumerator GetEnumerator() { return new List<int>{ 2, 4, 6 }.GetEnumerator(); } } [TestFixture] public class MyTests { [TestCaseSource(typeof(TestDataProvider))] public void TestOne(int number) { Assert.That(number % 2, Is.EqualTo(0)); } }


He visto cómo funciona internamente en NUnit. Solo lanzan una excepción si no existe una fuente en particular:

MemberInfo[] members = providerType.GetMember( providerName, MemberTypes.Field | MemberTypes.Method | MemberTypes.Property, BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (members.Length == 0) throw new Exception(string.Format( "Unable to locate {0}.{1}", providerType.FullName, providerName));

Más tarde, lo detectan y marcan un ParameterSet particular (clase que envuelve el origen del caso de prueba) como RunState.NotRunnable que luego se manejará como prueba ignorada.

Por lo tanto, probablemente no haya manera de cambiar este comportamiento sin cambiar el código NUnit, que por cierto está disponible para descargar. También puede intentar ponerse en contacto con el equipo de NUnit o simplemente tratar la prueba ignorada de la misma manera que las que fallan :)