J'aimerais rendre mon service de servicestack testable.
Actuellement, j'ai: p> où requestformSaThentication est p> Je me suis moqué de toutes les dépendances utilisées par 'autreCode ()' et tout ce qui reste est la substance qui est dans le service de classe de base. Existe-t-il une structure / une stratégie / une approche / quelque chose qui me manque cela rend ce trivial? P> p>
3 Réponses :
Je m'excuse de ne pas utiliser MOQ ... J'en ai déjà eu une partie de cela avec des rhinomocks. Je pense que le concept devrait transférer au MOQ. Ce pourrait être une bonne ressource aussi bien que celle-ci Ce .
Quoi qu'il en soit, je Pensez que le code de test ci-dessous devrait vous aider à démarrer. Votre couture dans la moqueur demande.originalRequest code> remplace le service service.requestContext code> avec un objet simulé. Ensuite, il vous suffit de vous moquer de tout au-delà de cela. Ça va être beaucoup de "moquer" et si tu me répète "tu me moques à chaque fois que tu te moques une classe, il est presque agréable. p>
Cela couvre beaucoup beaucoup, en fait. Merci! Une dernière chose, cependant: Savez-vous comment je peux remplacer le membre protégé "demande"? (ligne 4 dans mon premier bloc de code échouera avec NRE)
De plus ... il semble que "httpRequest" est une classe scellée et ne peut pas être moquée.
Ouais, httpreqeust est scellé, je pense que vous pouvez lancer à HTTPequestBase? Ligne 12 (moqueurreQuestContext.stub (x => x.get
Voici comment tester avec MOQ. Ce service recherche une "clé" et "valeur" dans la chaîne de requête et un autre paramètre dans la demande DTO. Le service renvoie une réponse à chaîne basée sur la valeur donnée.
[Test]
public void MyTest()
{
var mockRequestContext = new Mock<IRequestContext>();
var mockedHttpRequest = new Mock<IHttpRequest>();
NameValueCollection querystring = new NameValueCollection();
querystring.Add("myKey", "myValue");
mockedHttpRequest.SetupGet(r => r.QueryString).Returns(querystring);
mockRequestContext.Setup(x => x.Get<IHttpRequest>()).Returns(mockedHttpRequest.Object);
AboutService service = new AboutService
{
RequestContext = mockRequestContext.Object,
};
AboutResponse response = (AboutResponse)service.Any(new About
{
Company = "myOtherValue",
});
Assert.AreEqual(0, response.QueryResult);
Assert.AreEqual("validResponse", response.Version);
}
Assurez-vous de vérifier l'espace de noms: Servicestack.ServiceInterface.Testing.
Vous pouvez trouver un moqueurQuestContext que vous pouvez utiliser comme suit:
var mockContext = new ServiceStack.ServiceInterface.Testing.MockRequestContext();
//do stuff to set it up if desired...
AboutService service = new AboutService
{
RequestContext = mockContext
};