редактировать Коррекция:Не может иметь две операции в том же контракте с тем же именем: Auto Сформирован Асинхронный метод
Моя ошибка в том, что вместо использования ChatService.IChatService я использую ReflectorLike.ChatServiceReference.IchatService.
Другими словами, AFAIU Я ссылался на ссылку на интерфейс, а не на интерфейс. (Если вы найдете лучший способ объяснить, что, пожалуйста, предложите их, я отредактирую ответ позже) Если вы используете ту же ошибку, убедитесь, что используете правильный интерфейс.
Выпуск:
Ошибка:
SetUp : System.InvalidOperationException : Cannot have two operations in the same contract with the same name, methods ClientConnectAsync and ClientConnect in type ReflectorLike.ChatReference.IChatService violate this rule. You can change the name of one of the operations by changing the method name or by using the Name property of OperationContractAttribute.
Резюме: Я пытался сделать это Recommended patterns for unit testing web services
Но моя издевались служба бросает мне исключение, потому что все мои методы имеют близнецы с таким же именем, например, у него есть как ClientCon Nect и ClientConnectAsync, которые нарушают Правило службы WCF
У меня есть сервис, который интерфейс
namespace ChatService
{
[ServiceContract]
public interface IChatService
{
[OperationContract]
ChatUser ClientConnect(string userName);
[OperationContract]
void SendNewMessage(ChatMessage newMessage);
[OperationContract]
List<ChatUser> GetAllUsers();
[OperationContract]
void RemoveUser(ChatUser user);
[OperationContract]
List<ChatMessage> GetNewMessages(ChatUser user);
}
[DataContract]
public class ChatMessage
{
[DataMember]
public ChatUser User { get; set; }
[DataMember]
public string Message { get; set; }
private DateTime date;
[DataMember]
public DateTime Date
{
get { return date; }
set { date = value; }
}
}
/// <summary>
///
/// </summary>
[DataContract]
public class ChatUser
{
[DataMember]
public string UserName { get; set; }
[DataMember]
public string IpAddress { get; set; }
[DataMember]
public string HostName { get; set; }
public ChatUser(string userName)
{
this.UserName = userName;
}
public override string ToString()
{
return this.UserName;
}
}
}
Я хочу, чтобы проверить мой клиент, используя макет службы, поэтому я Протестируйте с NUnit и nsubstitute
namespace ReflectorLike.Tests
{
[TestFixture]
internal class ChatHubTester
{
private ChatHub hub;
private ServiceHost host;
private IChatService myMockedService;
[SetUp]
public void SetUp()
{
Castle.DynamicProxy.Generators.AttributesToAvoidReplicating.Add<ServiceContractAttribute>();
myMockedService = Substitute.For<IChatService>();
host = MockServiceHostFactory.GenerateMockServiceHost(myMockedService, new Uri("http://localhost:12345"), "ServiceEndPoint");
host.Open();
hub=new ChatHub();
}
[TearDown]
public void TearDown()
{
host.Close();
}
[Test]
public void SomeTest()
{
hub.Connect("Test");
}
}
}
Спасибо за ваш ответ. Как вы можете видеть в моем ответе, я полностью сдался и пошел на что-то еще. После нескольких секунд назад, пытаясь снова, я обнаружил свою ошибку. Я ссылался на ссылку (это имеет смысл?) Вместо '#using myservice' я написал '#using myasp.myserviceReference'. Поэтому я использовал неправильный интерфейс ... :( – Lomithrani