Я был очень доволен Moq, пока не потребовался тест метода, который принимает делегат как параметр и получил UnsupportedException. Выпуск также упоминается here и на Moq issue list.Mocking framework, который поддерживает издевательство метода с делегатом как параметр
Есть ли какие-либо фреймворки, поддерживающие этот вид насмешек?
Например:
///
/// Interfaces
///
public interface IChannelFactory<T> {
TReturn UseService<TReturn>(Func<T, TReturn> function);
}
public interface IService {
int Calculate(int i);
}
///
/// Test
///
Mock<IChannelFactory<IService>> mock = new Mock<IChannelFactory<IService>>();
// This line results in UnsupportedException
mock.Setup(x => x.UseService(service => service.Calculate(It.IsAny<int>()))).Returns(10);
Действительно ли это настоящий код или просто фрагменты образца? Я спрашиваю, потому что он не выглядит полностью указанным. Например, когда вы создаете свой макет, не должно быть другого уровня дженериков? 'new Mock>'? –
Ах да, спасибо за исправление. Это была не копия, а ошибка. – henginy
В вашей установочной строке вы передаете выражение (service => service.Calculate()). Вам нужно передать somthing, который разрешает делегат, такой как объект Func <>. – IanNorton