я ищу что-то похожее на то, что я делал бы с насмешками на носорога, но в отличном состоянии.
Иногда я также использую частичные насмешки.
в ASP - Насмешка носорога
const string criteria = "somecriteriahere";
ISomeRepository mockSomeRepository = MockRepository.GenerateStrictMock<SomeRepository>();
mockSomeRepository.Expect(m => m.GetSomesByNumber(criteria)).Return(new List<Some>() { });
mockSomeRepository.Expect(m => m.GetSomesByName(criteria)).Return(new List<Some>() { });
mockSomeRepository.Expect(m => m.GetSomesByOtherName(criteria)).Return(new List<Some>() { });
mockSomeRepository.SearchForSomes(criteria);
mockSomeRepository.VerifyAllExpectations();
-------- обратите внимание на виртуальный -------
public class SomeRepository : ISomeRepository {
public virtual IEnumerable<Some> GetSomesByNumber(string num)
{
//some code here
}
public virtual IEnumerable<Some> GetSomesByName(string name)
{
//some code here
}
public virtual IEnumerable<Some> GetSomesByOtherName(string name)
{
//some code here
}
public IEnumerable<Some> SearchForSomes(string criteria) {
this.GetSomesByNumber(criteria); //tested fully seperatly
this.GetSomesByName(criteria); //tested fully seperatly
this.GetSomesByOtherName(criteria); //tested fully seperatly
//other code to be tested
}
}
GetSomesByNumber, GetSomesByName, GetSomesByOtherName будут проверены полностью отдельно. Если бы я фактически предоставил значения и вошел в эти функции, мне кажется, что это похоже на интеграционный тест, где я тестирую несколько функций, а не одну единицу работы.
Итак, SearchForSomes я бы только тестировал этот метод и устранял все другие зависимости.
В Граалях
class XService {
def A() {
}
def B() {
def result = this.A()
//do some other magic with result
}
}
Я пробовал это - но не получилось
def XServiceControl = mockFor(XService)
XServiceControl.demand.A(1..1) { -> return "aaa" }
// Initialise the service and test the target method.
//def service = XServiceControl.createMock();
//def service = XServiceControl.proxyInstance()
// Act
//def result = XServiceControl.B(_params);
XServiceControl.use {
new XService().B(_params)
}
Я не знаю, как это сделать, кто-нибудь знает, как?
Спасибо