2014-10-27 4 views
0

У меня есть класс, который, как показано ниже:модульного тестирования класса с конструктором в качестве единственного открытого метода

class ToTest { 
    private MemberOne memberOne; 
    private MemberTwo memberTwo; 

    public ToTest(ParamOne paramOne, ParamTwo paramTwo) { 
     setMemberOne(paramOne); 
     setMemberTwo(paramTwo); 
    } 

    private setMemberOne(ParamOne paramOne) { 
     //Build the object. 
    } 

    private setMemberTwo(ParamTwo paramTwo) { 
     //build another object. 
    } 
} 

Причина сеттеры доступны только через конструктор является то, что я не хочу, чтобы изменить объект после инициализации потому что существует зависимость между memberOne и memberTwo (пример может быть MemberOne представляет собой заголовок таблицы, а MemberTwo представляет данные в таблице и обеспечивает простое и свободное кодирование кодирования, если количество столбцов одинаково в заголовке и наборе данных).

Как практика, я не пишу тестовые примеры для частных методов. Что было бы хорошей стратегией для написания тестовых примеров для этого класса.

+1

Что же делает объект? – FelixMarcus

+0

И вопрос в том, что? – SaintLike

+0

Есть методы получения этих объектов, а затем они передаются в JSP, где информация извлекается тегами, написанными для обработки 'MemberOne' и' MemberTwo'. –

ответ

2

Вы можете извлечь здание MemberOne и MemberTwo в отдельный класс.

private setMemberOne(ParamOne paramOne) { 
    memberOne = new MemberOneBuilder().buildFromParam(paramOne); 
} 

с

public class MemberOneBuilder { 
    public MemberOne buildFromParam(ParamOne paramOne) { 
     .... 
    } 
} 

Теперь вы можете легко проверить процесс сборки отдельно.

0

Возможно, я неверно истолковал это, но не мог ли вы сделать memberOne и memberTwo final, а затем сделать setMemberOne и setMemberTwo public? Затем вы можете создать экземпляр memberOne и memberTwo, но они не смогут быть изменены.

0

Это скорее скорее гипотетический сценарий, а только ради этого, если нам нужно написать такой код, а также тестовый сценарий для него, используя Reflection в классе Unit-Test, это только выход здесь.

Смежные вопросы