Question

J'essaie d'utiliser Moles pour simuler la classe Socket dans System.Net.Sockets.J'ai généré avec succès le fichier .moles et sa construction a ajouté un assemblage System.Net.Moles à mes références mais il ne génère pas la classe MSocket.En fait, seule la classe MIPEndPointCollection est générée.

Voici un exemple de classe qui utilise System.Net.Sockets.Socket:

using System.Text;
using System.Net.Sockets;

namespace MyProject
{
    public static class Communicator
    {
        public static int Send(string messages)
        {
            byte[] bytes = Encoding.ASCII.GetBytes(messages);
            int bytesSent = 0;
            using (Socket socket = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.Tcp))
            {
                socket.Connect("localhost", 1234);
                bytesSent = socket.Send(bytes);
            }

            return bytesSent;
        }
    }
}

Une classe de test dumy:

using MyProject;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Net.Moles;
using Microsoft.Moles.Framework;

[assembly: MoledType(typeof(System.Net.Sockets.Socket))]

namespace MyProjectTest
{
    [TestClass()]
    public class CommunicatorTest
    {
        private TestContext testContextInstance;
        public TestContext TestContext
        {
            get { return testContextInstance; }
            set { testContextInstance = value; }
        }

        [TestMethod()]
        [HostType("Moles")]
        public void SendTest()
        {
            //dose not exist in the System.Net.Moles namespace:
            //MSocket.Send = deligate(){ return 0; };
            int bytesSent = Communicator.Send("Test Message");
            Assert.AreEqual(0, bytesSent);
        }
    }
}

Et mon fichier .moles:

<Moles xmlns="http://schemas.microsoft.com/moles/2010/">
  <Assembly Name="System.Net" />
</Moles>

Quelqu'un peut-il expliquer ce qui ne va pas et ce qu'il faut faire pour que cela fonctionne?Je sais qu'il existe d'autres moyens de simuler la classe Socket, par exemple avec une classe wrapper qui implémente ma propre interface, mais cela ne m'intéresse que d'utiliser Moles.

--Merci Daniel

Était-ce utile?

La solution

D'après mon expérience, l'assemblage de Moling the System est bizarre.Essayez ceci pour la deuxième ligne de votre fichier .moles:

<Assembly Name="System" ReflectionOnly="true" />
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top