Attualmente sto scrivendo un quadro di test unitario che alla fine eseguirà test unitari standard scritti in Visual Studio. Al momento il Framework non funziona correttamente con gli accessor. Si consideri il seguente metodo di prova:Creazione di un'istanza di accesso classe
[TestMethod()]
public void TestMethod()
{
ExampleMethods_Accessor target = null;
target = new ExampleMethods_Accessor();
target.SomeMethod();
}
In questo esempio, l'accessorio è stato generato da Visual Studio. Il test dell'unità funziona perfettamente quando viene eseguito utilizzando l'ambiente di test unità di Visual Studio. Tuttavia, vorrei invocare il TestMethod() dal mio Framework. Alla riga "target = new ExampleMethods_Accessor()", viene generata la seguente eccezione:
Il tipo di inizializzatore per "Proband.ExampleMethods_Accessor" ha generato un'eccezione.
Eccezione interna:
Impossibile caricare il file o il montaggio: Proband, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null ...
Qualcuno ha un'idea di come Microsoft Unit Testing Framework invoca test unitari? Stavo pensando che potrebbe essere dovuto all'oggetto TestContext mancante. Questo è "nullo" nel mio caso. All'avvio dell'unità test in Visual Studio, l'oggetto TestContext contiene molte informazioni. Potrebbe essere, che ho bisogno di inizializzarlo correttamente? Come dovrebbe essere inizializzato?
Grazie per tutto l'aiuto, Christian
EDIT:
ho continuato a sperimentare con il modo di accesso stanno lavorando. Ho usato ILSpy per vedere quale codice viene generato nel Proband_Accessor.dll. Si scopre che l'istruzione che causa l'eccezione è:
SomeClass_Accessor.m_privateType = new PrivateType("Probant, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Probant.SomeClass");
ho modificato il mio codice di unit test per essere come questo (solo per test):
[TestMethod()]
[DeploymentItem("Proband.dll")]
public void SomeMethodTest()
{
ExampleMethods_Accessor target = null;
ExampleMethods c = null;
try
{
Assembly.Load("Proband, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"); // this works fine
PrivateType tx = new PrivateType(typeof(ExampleMethods)); // this works fine as well (also without loading the assembly)
PrivateType t = new PrivateType("Proband, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Proband.ExampleMethods"); // this causes the exception
c = new ExampleMethods(); // this works fine
target = new ExampleMethods_Accessor(); // this causes the exception as well
}
catch (Exception ex)
{
Console.WriteLine();
}
int actual;
actual = target.SomeMethod();
}
io assolutamente non capisco, perché "nuova PrivateType ("Proband, versione ...." non funziona. qualcuno ha un'idea?
Qual è l'assemblea 'Proband', e come avete cercato * * per renderlo disponibile? –
cosa stai scrivendo esattamente? sembra che tu stia usando il framework MSTest, dal tuo uso di [TestMethod]. Stai scrivendo una sorta di test personalizzato _runner_? –
Oh mi dispiace per non aver spiegato: l'assembly proband è quello contenente il codice che dovrebbe essere testato. ExampleMethods è una classe all'interno dell'assembly proband, che contiene i metodi privati ("SomeMethod"). – Christian