Aquí es otro ejemplo muy similar a la de Tim Abell sin embargo no se utiliza un marco de referencia para el lector CSV y que muestra los detalles de la prueba. Tenga en cuenta que cuando use TestCaseAttribute, se puede omitir TestAttribute.
[TestCaseSource("GetDataFromCSV")]
public void TestDataFromCSV(int num1,int num2,int num3)
{
Assert.AreEqual(num1 + num2 ,num3);
}
private IEnumerable<int[]> GetDataFromCSV()
{
CsvReader reader = new CsvReader(path);
while (reader.Next())
{
int column1 = int.Parse(reader[0]);
int column2 = int.Parse(reader[1]);
int column3 = int.Parse(reader[2]);
yield return new int[] { column1, column2, column3 };
}
}
public class CsvReader : IDisposable
{
private string path;
private string[] currentData;
private StreamReader reader;
public CsvReader(string path)
{
if (!File.Exists(path)) throw new InvalidOperationException("path does not exist");
this.path = path;
Initialize();
}
private void Initialize()
{
FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read);
reader = new StreamReader(stream);
}
public bool Next()
{
string current = null;
if ((current = reader.ReadLine()) == null) return false;
currentData = current.Split(',');
return true;
}
public string this[int index]
{
get { return currentData[index]; }
}
public void Dispose()
{
reader.Close();
}
}
datos CSV:
10.200.210 20.190.210 30.180.210 40.170.210 50.160.210 60.150.210 70.140.210 80.130.210 90.120.210 100.110.210
Nota: La tercera columna es la suma de las dos primeras columnas y esto se afirmará en la prueba unitaria.
Resultados:
![results](https://i.stack.imgur.com/dcxBo.png)
encontrar más adelante una alternativa utilizando objetos TestCaseData y el establecimiento de un tipo de retorno (que fuera de curso es obligatorio)
[TestCaseSource("GetDataFromCSV2")]
public int TestDataFromCSV2(int num1, int num2)
{
return num1 + num2;
}
private IEnumerable GetDataFromCSV2()
{
CsvReader reader = new CsvReader(path);
while (reader.Next())
{
int column1 = int.Parse(reader[0]);
int column2 = int.Parse(reader[1]);
int column3 = int.Parse(reader[2]);
yield return new TestCaseData(column1, column2).Returns(column3);
}
}
, gracias - He hecho algo de investigación. No existe tal complemento. Tal vez solo lo haga yo mismo. La razón principal por la que solicité NUnit fue porque es el único marco de prueba que he usado, eso es todo. – Nobody
Pruebe xUnit si le facilitará las pruebas en este sentido. Es muy similar a NUnit (¡James Newkirk desarrolló ambos!) Y puede vivir fácilmente al lado de NUnit hasta que averigüe si quiere cambiar completamente o no.No recomendaría tener xUnit y NUnit como parte de su solución en curso porque los corredores son diferentes y no creo que tengan ninguna capacidad para ejecutar las pruebas de los demás. –