Ответ 1
дамп класса XCTestCase предоставляет этот метод:
- (void)_recordValues:(id)arg1 forPerformanceMetricID:(id)arg2 name:(id)arg3 unitsOfMeasurement:(id)arg4 baselineName:(id)arg5 baselineAverage:(id)arg6 maxPercentRegression:(id)arg7 maxPercentRelativeStandardDeviation:(id)arg8 maxRegression:(id)arg9 maxStandardDeviation:(id)arg10 file:(id)arg11 line:(unsigned long long)arg12;
когда этот метод swizzled, первый параметр (arg1) имеет 10 длительностей:
["0.003544568",
"0.003456569",
"0.003198263",
"0.003257955",
"0.003508724",
"0.003454298",
"0.003461192",
"0.00423787",
"0.003359195",
"0.003335757"]
i добавлено 4 новых значения (1.0, 2.0, 3.0, 4.0) в конец этого списка, прежде чем передать его обратно в исходную реализацию, но, к сожалению, другой класс, который соблюдает, XCTestLog
, имеет внутреннюю проверку работоспособности, которая сработает:
Assertion failure in +[XCTestLog _messageForTest:didMeasureValues:forPerformanceMetricID:name:unitsOfMeasurement:baselineName:baselineAverage:maxPercentRegression:maxPercentRelativeStandardDeviation:maxRegression:maxStandardDeviation:file:line:]
caught "NSInternalInconsistencyException", "Performance Metrics must provide 10 measurements."
как только метод XCTestLog
также переопределяется, поэтому он не утверждает, дополнительные 4 значения могут быть добавлены без каких-либо жалоб. к сожалению, в представлении показывается только 10 результатов.
однако, он обновляет значения общего времени + стандартного отклонения в мини-представлении.
Перед Swizzling
После Swizzling и добавления 4 значений
чтобы просмотреть более 10 результатов, вероятно, придется настроить среду выполнения XCode, чтобы показать таблице, чтобы показать больше элементов.