Rhino Mocks проверяет, что закрытый метод вызывается из открытого метода

Мы создали этот метод util при работе над Phonetradr , который может дать вам безопасный доступ к глубоким свойствам с помощью TypScript:

/**
 * Type-safe access of deep property of an object
 *
 * @param obj                   Object to get deep property
 * @param unsafeDataOperation   Function that returns the deep property
 * @param valueIfFail           Value to return in case if there is no such property
 */
export function getInSafe(obj: O, unsafeDataOperation: (x: O) => T, valueIfFail?: any) : T {
    try {
        return unsafeDataOperation(obj)
    } catch (error) {
        return valueIfFail;
    }
}

//Example usage:
getInSafe(sellTicket, x => x.phoneDetails.imeiNumber, '');

//Example from above
getInSafe(foo, x => x.bar.check, null);

1
задан user647078 17 June 2010 в 01:35
поделиться

2 ответа

Возможно, есть способ сделать это, но в большинстве случаев вы не захотите этого делать. Ваши модульные тесты не должны зависеть от скрытых реализаций или кода. Рассматривайте свои классы как "черные ящики", когда вы тестируете их, где у вас есть доступ только к изменению входных данных и тестированию выходных.

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

2
ответ дан 2 September 2019 в 23:43
поделиться

Я согласен с ответом mjd79, однако если вы привержены идее проверки того, что ReportFailure был вызван, вы можете изменить уровень защиты метода на Internal, и установить атрибут InternalsVisibleTo на вашей сборке так, чтобы он позволял вашим модульным тестам обращаться к нему.

Более эффективным подходом может быть создание макета ресурса, к которому обращается ReportFailure, и проверка того, что вызывается какой-либо публичный метод этого макета.

0
ответ дан 2 September 2019 в 23:43
поделиться
Другие вопросы по тегам:

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