Без использования каких-либо дополнительных библиотек:
package test;
import java.io.DataInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) throws Exception{
List<Class> classes = getClasses(Test.class.getClassLoader(),"test");
for(Class c:classes){
System.out.println("Class: "+c);
}
}
public static List<Class> getClasses(ClassLoader cl,String pack) throws Exception{
String dottedPackage = pack.replaceAll("[/]", ".");
List<Class> classes = new ArrayList<Class>();
URL upackage = cl.getResource(pack);
DataInputStream dis = new DataInputStream((InputStream) upackage.getContent());
String line = null;
while ((line = dis.readLine()) != null) {
if(line.endsWith(".class")) {
classes.add(Class.forName(dottedPackage+"."+line.substring(0,line.lastIndexOf('.'))));
}
}
return classes;
}
}
Обновление:
Fredrik поставил решение в качестве примера, как сделать модульный тест linq2sql приложения в его блоге. Можно загрузить его в:
Не только делает я думаю его великое, что он отправил решение в качестве примера, ему также удалось извлечь интерфейсы для всех классов, который делает дизайн более разъединенным.
Мое старое сообщение:
*I нашел эти блоги, что я думаю, хорошее начало для того, чтобы сделать обертку DataContext: Link1 Link2
Они затрагивают почти ту же тему за исключением того, что первый реализует средства для извлечения интерфейсов для таблиц также. Второй более обширен, хотя, таким образом, я включал его также.*
Оберните DataContext, затем дразните обертку. Это - самый быстрый способ сделать его, tho это требует кодирования для тестирования, которое некоторые люди думают запахи. Но иногда, когда у Вас есть зависимости, которые нельзя (легко) дразнить, это - единственный путь.
Linq делает тестирование намного легче. Linq запрашивает работу точно также над Списками как на материале Linq-to-sql. Можно выгрузить Linq к SQL для объектов списка и протестировать тот путь.
Mattwar в Своенравный блог имел большую статью о том, как копировать расширяемый контекст данных Linq2Sql. Проверьте его - , НАСМЕШКИ ОТКЛОНЯЮТ - AN РАСШИРЯЕМЫЙ LINQ К SQL DATACONTEXT
Обычно, Вы не должны тестировать часть кода, который использует LINQ для SQL, но если Вы действительно хотите, можно использовать те же наборы данных, которые Вы запрашиваете против сервера и превращаете их в объекты в оперативной памяти и выполняете запросы LINQ против того (который использовал бы Счетные методы вместо Queryable).
Другая опция состоит в том, чтобы использовать Matt Warren mockable версия DataContext.
можно также получить SQL-операторы, которые LINQ к SQL использует путем получения их через отладчик (от объекта IQueryable), проверьте тех вручную, и затем включайте их в автоматизированные тесты.
LINQ к SQL на самом деле действительно хорош к модульному тесту, поскольку это имеет способность создать базы данных на лету из того, что определяется в Вашем DBML.
Это делает действительно хорошим протестировать уровень ORM путем создания DB через DataContext и наличия его пустой для начала.
я покрываю его на своем блоге здесь: http://web.archive.org/web/20090526231317/http://www.aaron-powell.com/blog/may-2008/unit-testing-linq-to-sql.aspx