Если вы хотите провести модульное тестирование вашего синглтона, вы также должны сделать его так, чтобы вы могли заменить его на имитированный синглтон и / или сбросить его до нормального:
@implementation ArticleManager
static ArticleManager *_sharedInstance = nil;
static dispatch_once_t once_token = 0;
+(ArticleManager *)sharedInstance {
dispatch_once(&once_token, ^{
if (_sharedInstance == nil) {
_sharedInstance = [[ArticleManager alloc] init];
}
});
return _sharedInstance;
}
+(void)setSharedInstance:(ArticleManager *)instance {
once_token = 0; // resets the once_token so dispatch_once will run again
_sharedInstance = instance;
}
@end
Реализация MOXy JAXB (я технический руководитель) имеет расширение ( @XmlPath ) для обработки этого случая:
import java.util.*;
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlPath("myList/@number")
private int number;
@XmlElementWrapper(name="myList")
@XmlElement(name="myElement")
private List<String> someList = new LinkedList<String>();
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public List<String> getSomeList() {
return someList;
}
public void setSomeList(List<String> someList) {
this.someList = someList;
}
}
Будет производить следующий XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<myList number="123">
<myElement>FOO</myElement>
<myElement>BAR</myElement>
</myList>
</root>
Когда этот код выполняется:
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);
Root root = new Root();
root.setNumber(123);
root.getSomeList().add("FOO");
root.getSomeList().add("BAR");
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
}
}
Чтобы заставить это работать, используя строго стандартный код JAXB, вам нужно будет использовать адаптер XML:
Примечание:
Чтобы использовать MOXy JAXB, вам нужно добавить файл с именем jaxb.properties в классы вашей модели со следующей записью:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory