C# Asyn. Программирование сокета

Одинарные кавычки кодируют отдельный символ (тип данных char), в то время как двойные кавычки кодируют строку нескольких символов. Различие подобно различию между единственным целым числом и массивом целых чисел.

char c = 'c';
string s = "s"; // String containing a single character.
System.Diagnostics.Debug.Assert(s.Length == 1);
char d = s[0];

int i = 42;
int[] a = new int[] { 42 }; // Array containing a single int.
System.Diagnostics.Debug.Assert(a.Length == 1);
int j = a[0];
5
задан Drew Noakes 14 September 2009 в 14:02
поделиться

1 ответ

Я предполагаю, что вы тестируете какой-то собственный класс, использующий потоки .NET; назовем его MessageSender . Обратите внимание, что нет причин проводить модульное тестирование самих потоков .NET, это работа Microsoft. Вам не следует проводить модульное тестирование кода .NET framework, только свой собственный.

Во-первых, убедитесь, что вы вставляете поток, используемый MessageSender . Не создавайте его внутри класса, а принимайте как значение свойства или аргумент конструктора. Например:

public sealed class MessageSender
{
   private readonly Stream stream;

   public MessageSender(Stream stream)
   {
      if (stream == null)
         throw new ArgumentNullException("stream");
      this.stream = stream;
   }

   public IAsyncResult BeginSendHello(AsyncCallback callback, object state)
   {
      byte[] message = new byte[] {0x01, 0x02, 0x03};
      return this.stream.BeginWrite(
         message, 0, message.Length, callback, state);
   }

   public void EndSendHello(IAsyncResult asyncResult)
   {
      this.stream.EndWrite(asyncResult);
   }
}

Теперь пример теста: вы можете проверить, что BeginSendHello вызывает BeginWrite в потоке и отправляет правильные байты. Мы высмеем поток и настроим ожидание, чтобы проверить это. В этом примере я использую структуру RhinoMocks .

[Test]
public void BeginSendHelloInvokesBeginWriteWithCorrectBytes()
{
   var mocks = new MockRepository();
   var stream = mocks.StrictMock<Stream>();
   Expect.Call(stream.BeginWrite(
      new byte[] {0x01, 0x02, 0x03}, 0, 3, null, null));
   mocks.ReplayAll();

   var messageSender = new MessageSender(stream);
   messageSender.BeginSendHello(null, null);

   mocks.VerifyAll();
}
4
ответ дан 15 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: