Что лучший способ состоит в том, чтобы сделать вывод одного потока входом другому

https://laravel.com/docs/5.7/mocking

Если вы хотите подделать прослушиватели событий только для части вашего теста, вы можете использовать Метод fakeFor:

blockquote>
    $order = Event::fakeFor(function () {
        $order = factory(Order::class)->create();

        Event::assertDispatched(OrderCreated::class);

        return $order;
    });

    // Events are dispatched as normal and observers will run ...
    $order->update([...]);

Все внутри function() {} будет иметь поддельные события. Все снаружи будет функционировать нормально.

5
задан Robert Wagner 6 July 2010 в 11:36
поделиться

3 ответа

Нет действительно лучшего пути, чем это, хотя я склонен помещать часть цикличного выполнения в a CopyTo дополнительный метод, например.

public static void CopyTo(this Stream source, Stream destination)
{
    var buffer = new byte[0x1000];
    int bytesInBuffer;
    while ((bytesInBuffer = source.Read(buffer, 0, buffer.Length)) > 0)
    {
        destination.Write(buffer, 0, bytesInBuffer);
    }
}

Который Вы могли затем назвать как:

fsin.CopyTo(ds);
5
ответ дан 14 December 2019 в 01:20
поделиться

Теперь, когда я думаю об этом, я никогда не видел встроенной поддержки передачи по каналу результатов входного потока непосредственно в поток вывода, как Вы описываете. Эта статья о MSDN имеет некоторый код для класса "StreamPipeline", который делает вид вещи, которую Вы описываете.

1
ответ дан 14 December 2019 в 01:20
поделиться

.NET 4.0 теперь имеет функцию Stream.CopyTo

3
ответ дан 14 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

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