Я разрабатываю симулятор для машины. Он считывает файл, сохраняет его в строке (в виде двоичного числа) в массив, который должен имитировать память компьютера. Затем он передается интерпретатору, который принимает первый элемент массива, и на основе первых 4 символов он отправляется в другой класс.Как я могу использовать jUnit для тестирования класса, использующего singleton?
Пример одного из этих классов ниже:
public class Add {
private String cell;
Add() {
cell = null;
}
/**
* Method that performs the operation add.
*/
public void addition() {
// TODO Figure out 2's complement.
Loader instance = Loader.Instance();
cell = instance.getCell();
Integer DR1num = Integer.parseInt(cell.substring(4, 6), 2);
Integer SR1num = Integer.parseInt(cell.substring(7, 9), 2);
if (cell.charAt(10) == '0') {
Integer SR2num = Integer.parseInt(cell.substring(13, 15), 2);
Integer addedval = instance.getRegister(SR1num)
+ instance.getRegister(SR2num);
instance.setCCR(addedval);
instance.setRegister(DR1num, addedval);
} else if (cell.charAt(10) == '1') {
Integer immediate = Integer.parseInt(cell.substring(11, 15), 2);
Integer addedval = instance.getRegister(SR1num) + immediate;
instance.setCCR(addedval);
instance.setRegister(DR1num, addedval);
} else {
System.err.println("Invalid Char at Position 10. Expected 0 or 1");
}
instance.incrementPC();
}
public String getcell() {
return cell;
}
}
Переменных Описания: экземпляра является клеткой одноэлементного является двоичной строкой, которая хранится в массиве памяти DR1num является Регистр назначения. (aka R0, R1, ... R7) SR1num является исходным регистром
Что это за операция, так это взятие двух исходных регистров и их объединение (затем устанавливает регистр кода условий, если он положительный, отрицательный или нулевой), или принимает исходный регистр и мгновенное значение и добавляет эти два вместе. Результат сохраняется в регистре назначения.
Я решил использовать одноэлементный класс, потому что мне нужна память, регистры общего назначения, регистр кода условий и счетчик программ для синхронизации на протяжении всей программы. Проблема в том, что я не знаю, как тестировать мою программу (желательно с помощью jUnit).
Единственный способ, которым я могу придумать тестирование программы, - написать кучу отдельных файлов для чтения программы. Кроме того, это означает, что вместо проверки только одной части моей программы, как минимум, она тестирует три класса , Класс, который читает в программе и содержит все методы для singleton, класс, который определяет, какой класс вызывать, и, наконец, класс, который фактически выполняет эту часть (например, Add).
Есть ли у кого-нибудь предложения по улучшению способа тестирования?
Обязательно: «Одиночки патологические лжецы» http://googletesting.blogspot.com/2008/08/by-miko-hevery-so-you-join- new-project.html и «Где все синглтоны ушли?» http://misko.hevery.com/2008/08/21/where-have-all-the-singletons-gone/ –
Guice также является большой библиотекой DI и ориентирован только на DI. – ColinD
@Matt - хорошие ссылки.Спасибо –