2015-03-26 1 views
0

Je dois tester la méthode générique ci-dessous qui est la classe interne d'un autre assemblage.C# Tests unitaires pour la méthode générique

internal class JsonSerializationUtility 
{ 
    public static string SerializeJson<T>(T obj) 
    { 
    string jsonFormattedString = string.Empty; 
    try { 
     MemoryStream memStreamObj = new MemoryStream(); 
     DataContractJsonSerializer jsonSerObj = new DataContractJsonSerializer(typeof(T)); 
     jsonSerObj.WriteObject(memStreamObj, obj); 
     memStreamObj.Position = 0; StreamReader sr = new StreamReader(memStreamObj); 
     jsonFormattedString = sr.ReadToEnd(); 
    } 
    catch (Exception ex) { 
     Log.Error("Exception details: ", ex); 
    } 
    return jsonFormattedString; 
    } 
} 

et j'ai essayé de cette façon:

[TestMethod] 
public void SerializeJson() 
{ 
    PrivateType privateObj = new PrivateType(typeof(JsonSerializationUtility)); 
    string input= "WorldCup2015"; 
    string output = privateObj.InvokeStatic("SerializeJson<objectType>", input).ToString(); 
    Assert.IsNotNull(output); 
} 

Mais je reçois la référence de méthode manquante. Quelqu'un peut-il suggérer comment devrait avoir à tester pour la méthode générique.

J'ai effectué la même procédure d'écriture de code de test pour une méthode statique simple, mais impossible pour une méthode générique.

+0

En général, vous ne testez pas le code interne directement - vous testez quel que soit _calls_ ce code. –

Répondre

0

Vous utilisez une mauvaise surcharge.

Utilisez PrivateType.InvokeStatic Method (String, Type[], Object[], Type[]) pour appeler une méthode générique.

Notez que moi aussi j'utiliserais [assembly: InternalsVisibleTo("TestProject")].

+0

Salut, Merci pour votre suggestion. J'ai essayé comme suggéré, mais je reçois l'exception, pourriez-vous s'il vous plaît m'aider où je vais mal, Le ci-dessous est l'exception que je reçois. chaîne entrée = "WorldCup2015"; PrivateType privateObj = new PrivateType (typeof (JsonSerializationUtility)); Type [] types = new Type [1]; types [0] = typeof (chaîne); Object [] argumentObjarray = new Objet [1]; argumentObjarray [0] = entrée; privateObj.InvokeStatic ("SerializeJson", types, argumentObjarray, types); } –