6
votes

Dans ServiceStack, est-il possible de se moquer de l'objet request.OriginalRequest pour des tests unitaires?

J'aimerais rendre mon service de servicestack testable.

Actuellement, j'ai: xxx

où requestformSaThentication est xxx

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?


0 commentaires

3 Réponses :


2
votes

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 remplace le service service.requestContext 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. xxx


3 commentaires

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 ())



7
votes

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);
    }


0 commentaires

2
votes

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
};


0 commentaires