Tôi có một đối tượng Singleton/Factory mà tôi muốn viết một bài kiểm tra JUnit cho. Phương thức Factory quyết định việc triển khai lớp nào để khởi tạo dựa trên một tên lớp trong một tệp thuộc tính trên đường dẫn lớp. Nếu không tìm thấy tệp thuộc tính nào hoặc tệp thuộc tính không chứa khóa classname, thì lớp sẽ khởi tạo lớp triển khai mặc định.Sử dụng các trình nạp lớp khác nhau cho các bài kiểm tra JUnit khác nhau?
Vì nhà máy giữ một thể hiện tĩnh của Singleton để sử dụng khi nó được khởi tạo, để có thể kiểm tra logic "chuyển đổi dự phòng" trong phương thức Factory, tôi cần chạy từng phương thức thử trong một trình nạp lớp khác.
Có cách nào với JUnit (hoặc với gói kiểm tra đơn vị khác) để thực hiện việc này không?
chỉnh sửa: đây là một số mã máy đó là trong sử dụng:
private static MyClass myClassImpl = instantiateMyClass();
private static MyClass instantiateMyClass() {
MyClass newMyClass = null;
String className = null;
try {
Properties props = getProperties();
className = props.getProperty(PROPERTY_CLASSNAME_KEY);
if (className == null) {
log.warn("instantiateMyClass: Property [" + PROPERTY_CLASSNAME_KEY
+ "] not found in properties, using default MyClass class [" + DEFAULT_CLASSNAME + "]");
className = DEFAULT_CLASSNAME;
}
Class MyClassClass = Class.forName(className);
Object MyClassObj = MyClassClass.newInstance();
if (MyClassObj instanceof MyClass) {
newMyClass = (MyClass) MyClassObj;
}
}
catch (...) {
...
}
return newMyClass;
}
private static Properties getProperties() throws IOException {
Properties props = new Properties();
InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(PROPERTIES_FILENAME);
if (stream != null) {
props.load(stream);
}
else {
log.error("getProperties: could not load properties file [" + PROPERTIES_FILENAME + "] from classpath, file not found");
}
return props;
}
Độc thân dẫn đến cả thế giới bị thương. Tránh đơn và mã của bạn trở nên dễ dàng hơn nhiều để kiểm tra và chỉ toàn diện đẹp hơn. –