Grundsätzlich sind einige meiner Tests erfolgreich, einige sind fehlgeschlagen. Per Mr. Skeets hervorragendem Vorschlag habe ich ein vollständiges Codebeispiel erstellt, um zu bestätigen, dass ich nicht verrückt bin. Dies ist der Code:In System.MissingMethodException ausgeführt: Methode nicht gefunden mit PrivateObject
namespace ClassLibrary
{
using System;
public class Manager
{
private int SampleMethod(int id)
{
return id;
}
}
}
Mein Test ist:
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);
}
}
}
Der erste Test (TestPasses()) arbeitet.
Der zweite Test (TestErrorsOut()) schlägt mit dem folgenden Fehler: { „Die Methode‚ClassLibrary.Manager.SampleMethod‘nicht gefunden“}
Die verwirrende Sache ist der Fehler konsistent ist, aber die tatsächliche Test ist fast identisch. Das macht keinen Sinn. Ich habe dies auf VS2012 RC und VS2010 versucht, mit den gleichen Ergebnissen.
Das einzige, was ich mir vorstellen kann, ist "0" wird als etwas neben int geworfen, was bedeutet, dass es die Methodensignatur von SampleMethod nicht finden kann? Ich habe einen dritten Test ausprobiert, um den gesuchten Typ (TestAlsoErrorsOut()) explizit zu übergeben, aber auch mit dem gleichen Fehler.
Ideen? Vielen Dank.
bearbeiten
Durch die Verwendung von Ians Vorschlag zur Verwendung des obj [] anstelle von params obj [] Überlast an, es funktioniert (Test TestWorksAsWell()). Und das erklärt, warum TestAlsoErrorsOut() fehlschlägt, weil ich die params-Methode verwende, die mit Type [] nicht funktionieren würde. Also, das ist behoben. Aber warum? Warum funktioniert params obj [], wenn eine 1 übergeben wird, aber keine 0?
zeigen Sie ein kurzes, aber vollständiges Programm, das Problem zu demonstrieren? Ist es ein Tippfehler von 1 oder so? –
Warum möchten Sie eine private Methode testen? – Anuraj
@Anuraj - Ich verweise auf diesen Artikel auf "warum", aber ich denke nicht, dass dies das Forum ist, um darüber zu diskutieren. http://www.codeproject.com/Articles/9715/How-to-Test-Private-and-Protected-Methods-in-NET. – bryanjonker