Насмешки носорога AssertWasCalled (многократно) на методе get свойства, использующем AAA

Важность местных особенностей можно оценить с помощью пакета извести.

library(solitude)
library(lime)

Во-первых, некоторые данные о игрушках:

set.seed(1234)
data<-data.frame(rnorm(20,0,1),rnorm(20,0,0.5))
colnames(data)<-c("x","y")
row.names(data)<-seq(1,nrow(data),1)

Взгляните на данные о игрушках:

plot(data)
text(data-0.05,row.names(data))

Эти случаи выглядят как выбросы:

[113 ]

Вырастить лес изоляции:

model<-isolation_forest(data, importance="impurity")

Поскольку одиночество не поддерживается в извести, нам нужно построить две функции, чтобы известь могла обрабатывать объекты одиночества. Функция model_type сообщает lime, какая у нас модель. Функция Предсказание_модели позволяет извести предсказывать с объектами одиночества.

model_type.solitude <- function(x, ...) {
  return("regression")
}

predict_model.solitude <- function(x, newdata, ...) {
  pred <- predict(x, newdata)
  return(as.data.frame(pred))
}

Затем мы можем сгенерировать объект извести и оценить важность функции уровня наблюдения (и для более надежных результатов можно задать большее число перестановок):

lime1 <- lime(data, model)
importance <- data.frame(explain(data, lime1,
                             n_features = 2,n_permutations = 500 ))

Важность функции важна $ feature_weight , Проверка результатов по конкретному случаю:

importance[importance$case %in% outliers,c("case","feature","feature_weight")]

Сюжет:

plot_features(importance[importance$case %in% outliers,] , ncol = 2)

Надеюсь, что это полезно!

Конечно, прочитайте lime как основывается на определенных предположениях.

51
задан womp 10 April 2009 в 03:55
поделиться

5 ответов

newContact.AssertWasCalled (x => {var dummy = x.Forenames;}, options => options.Repeat.AtLeastOnce ());

Repeat.Any не работать с AssertWasCalled , потому что 0 считается любым ... поэтому, если он НЕ ВЫЗЫВАЛСЯ, AsserWasCalled вернет ИСТИНА, даже если он не был вызван.

75
ответ дан 7 November 2019 в 10:04
поделиться

Какова ваша мотивация в проверке количества звонков? Это особенно дорогая операция? Если это так, то я бы посоветовал вам поместить его за метод вместо этого, поскольку, с семантической точки зрения, свойства должны быть недорогими вызовами.

Кроме того, проверка количества вызовов свойства не является основной задачей модульного тестирования (не не волнуйтесь, это слишком распространенная ошибка - мы все были там). То, что вы действительно должны тестировать, это то, что с учетом состояния вашего фиктивного объекта метод дает ожидаемый результат. Сколько раз вызывается метод, чтобы сделать это, на самом деле не имеет значения (если это не служба для отправки электронной почты или чего-то еще). Это деталь реализации, которую вы обычно не

2
ответ дан Garry Shutler 7 November 2019 в 10:04
поделиться

newContact.Expect (c => c.ForeNames) .Return (...) .Repeat.Any ()

0
ответ дан Lennaert 7 November 2019 в 10:04
поделиться

В зависимости от вашей версии Rhino, которую вы используете, вы можете использовать:

// Call to mock object here
LastCall.IgnoreArguments().Repeat.Never();
2
ответ дан 7 November 2019 в 10:04
поделиться

Я согласен с ответом chris

newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.AtLeastOnce());

Кроме того, если вы точно знаете, сколько раз будет вызвано свойство, вы можете сделать

newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.Times(n));

где n - int.

26
ответ дан 7 November 2019 в 10:04
поделиться
Другие вопросы по тегам:

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