Как к модульному тесту IDisposable?

То, что вы знаете о получении индекса в array_reduce, не существует. Проверьте документацию.

Вопрос в том, , почему ?

Посмотрите, сокращение используется для того, чтобы перейти к одному единственному значению, его агрегации. У вас есть начальное значение, а следующее значение показывает вашу стратегию снижения. Нет смысла знать текущий индекс предмета.

В некоторых других языках они могут предоставлять текущий индекс, но не для этого array_reduce в PHP. Это язык и функция разработаны, есть некоторые ограничения в реализации.

Но это не значит, что у тебя не может быть этого. Вы можете получить его, но не через обратный вызов!

$i = 0;
$data = [1, 2, 3, 4];

// (1) 
$result = array_reduce($data, function ($c, $i) { return $c + $i; }, 0);

// (2)
array_reduce($data, function ($c, $i) { echo "$i\n"; $i++; return $c + $i; }, 0);

Дело в том, что функция предназначена для этого. Или вы пытаетесь использовать неправильную функцию. Некоторые другие функции могут быть тем, что вы ищете.

Или вы можете написать функцию, которая тоже это делает:)

10
задан David Schmitt 29 October 2008 в 10:40
поделиться

4 ответа

Нет, GC.Collect () вызов является асинхронным, необходимо было бы также назвать это:

System.GC.WaitForPendingFinalizers();
8
ответ дан 4 December 2019 в 01:32
поделиться

Я смотрел бы на, Располагают, Завершение и управление ресурсами, это - лучшая ссылка на предмете, о котором я знаю. Используя их шаблон:

~ComplexCleanupBase()
{
    Dispose(false);
}

public void Dispose()
{
    Dispose(true);
    GC.SuppressFinalize(this);
}

protected override void Dispose(bool disposing)
{
   if (!disposed)
   {
        if (disposing)
        {
            // dispose-only, i.e. non-finalizable logic
        }

        // new shared cleanup logic
        disposed = true;
    }

    base.Dispose(disposing);
}

Вы волнуете с очень простым Финализатором/Располагать (), методы и тестируемое Располагают (bool). Никакая потребность вызвать Завершение или что-либо с помощью класса GC.

2
ответ дан 4 December 2019 в 01:32
поделиться

Вы могли дразнить IDisposable соедините интерфейсом и ожидайте вызов к Dispose? Это, по крайней мере, позволило бы Вам видеть, когда объект на самом деле расположен.

0
ответ дан 4 December 2019 в 01:32
поделиться

Я думаю, что склонился бы к созданию, Завершают (), называют другой метод и тест, что другой метод делает то, что Вы хотите. Вы не получили бы 100%-е покрытие кода, но по крайней мере Вы будете знать, что метод высвобождает средства объекта правильно.

0
ответ дан 4 December 2019 в 01:32
поделиться
Другие вопросы по тегам:

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