2016-04-11 16 views
-1

parametresi olarak [] dizesiyle yöntemin başlatılması üzerine parametre olarak string[] özel bir yöntem için birim testleri yazmaya çalışıyorum. Özel bir yöntem çağırmak, PrivateObject sınıfı ile çalışır, ancak ben string[] ile çağırarak denedim. Başvurusu bir nesnenin çağırmaPrivateObject NullReferenceException, parametre

örneğine verilmedi:

Test

System.NullReferenceException döndürür.

public class Program{ 
    public Program(){} 

    private void TestCommand(string[] command){} 
} 

Aşağıdaki çalıştı:

Program program = new Program(); 
PrivateObject privateObject = new PrivateObject(program); 

object[] parameters = new object[1] { 
    new string[2] { 
     "add", 
     "rando" 
    } 
}; 

/* doesn't work either 
object[][] parameters = new object[1][]; 
parameters[0] = new string[2]; 

parameters[0][0] = "add"; 
parameters[0][1] = "rando";*/ 

privateObject.Invoke("TestCommand", parameters); 
+0

Sizin kodunuz olduğu gibi çalışmalıdır. Gerçek 'TestCommand' gerçekte ne yapıyor? – forsvarir

+0

Ne demek '' de çalışmıyor? Bunlar farklı şeyler, aynı şey için sadece farklı kodlar değil. – Toxantron

+0

Parametre listesi 'params nesnesi []' ise, o zaman iki yolla çağrılması paramı 'privateObject.Invoke ("TestCommand"), yeni string [] {"add", "rando"}) veya privateObject.Invoke ("TestCommand", yeni nesne [] {new string [] {"add", "rando"}}) 'kullanmak için. İkincisinin gerekli olduğu durumlar var, ama sanırım dizilerinizi aşırı iç içe geçiriyorsunuz. –

cevap

0

çağırma yanlış bir şey yoktu çıktı

Bu

ben çağırmak için gereken yöntemi içeren sınıftır. Bunun yerine istisna, TestCommand'ın içinden çağrılan bir yöntemde meydana geldi. Yöntemde kullanılan bir alan atanmadı. Bu Visual Studio'da alınan hata mesajlarından hiç de net değildi, istisna Invoke yönteminde olduğu gibi görünüyordu.

İlgili konular