Básicamente, algunas de mis pruebas están teniendo éxito, algunas fallan. Según la excelente sugerencia del Sr. Skeet, creé una muestra de código completo para confirmar que no estoy loco. Este es el código:Ejecutando en System.MissingMethodException: Método no encontrado con PrivateObject
namespace ClassLibrary
{
using System;
public class Manager
{
private int SampleMethod(int id)
{
return id;
}
}
}
Mi prueba es:
namespace UnitTestProject
{
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class UnitTest
{
[TestMethod]
public void TestPasses()
{
var privateInfo = new PrivateObject(new ClassLibrary.Manager());
var actual = privateInfo.Invoke("SampleMethod", 1);
}
[TestMethod]
public void TestErrorsOut()
{
var privateInfo = new PrivateObject(new ClassLibrary.Manager());
var actual = privateInfo.Invoke("SampleMethod", 0);
}
[TestMethod]
public void TestWorksAsWell()
{
var privateInfo = new PrivateObject(new ClassLibrary.Manager());
privateInfo.Invoke("SampleMethod", new object[] { 0 });
}
[TestMethod]
public void TestAlsoErrorsOut()
{
var privateInfo = new PrivateObject(new ClassLibrary.Manager());
var types = new Type[] { typeof(int) };
var actual = privateInfo.Invoke("SampleMethod", types, 0);
}
}
}
La primera prueba (TestPasses()) funciona.
La segunda prueba (TestErrorsOut()) falla con el siguiente error: { " 'ClassLibrary.Manager.SampleMethod' Método no encontrado"}
Lo desconcertante es el error es consistente, pero el real la prueba es casi idéntica. No tiene sentido. Intenté esto con VS2012 RC y VS2010, con los mismos resultados.
Lo único que se me ocurre es que "0" está siendo lanzado como algo además de int, lo que significa que no puede encontrar la firma del método de SampleMethod? Probé una tercera prueba para pasar explícitamente en el tipo que estoy buscando (TestAlsoErrorsOut()), pero eso también genera errores con el mismo error.
Ideas? Gracias.
Editar para añadir
Mediante el uso de la sugerencia de utilizar de Ian obj [] en lugar de params obj [] sobrecarga, funciona (prueba TestWorksAsWell()). Y eso explica por qué TestAlsoErrorsOut() falla, porque estoy usando el método params, que no funcionaría con Type []. Por lo tanto, esto es fijo. ¿Pero por qué? ¿Por qué los params obj [] funcionan al pasar un 1, pero no un 0?
Se puede mostrar un programa corto pero completo para mostrar el problema? ¿Es un error tipográfico de 1 por l o algo así? –
¿Por qué quiere probar la unidad de un método privado? – Anuraj
@Anuraj - Me remito a este artículo sobre "por qué", pero no creo que este sea el foro para discutir eso. http://www.codeproject.com/Articles/9715/How-to-Test-Private-and-Protected-methods-in-NET. – bryanjonker