我有两个项目A和B; B依赖于A.我想根据A中对象的注释在B中使用Annotation Processor生成一些代码.当我使用正确的Processor实现运行编译时,只会拾取B中带注释的对象.
我知道默认情况下必须禁用扫描其他JAR,因为您通常不希望对所有依赖项执行注释扫描.我也明白,由于编译器魔术可能无法做我想做的事 - 我不太了解 - 但我希望不是.
我的项目称为DB和WEB.WEB显然依赖于DB的JPA访问; 这是在Maven中配置的.由于许多架构选择,DB必须保持独立的JAR.除了WEB使用的一些注释之外,DB不使用Spring; WEB使用Spring MVC.
我正在尝试CrudRepository使用Annotation Processor为我的所有JPA实体生成接口.这些@Repository对象应该repo放在WEB项目的包中,因此它们可以@Autowired在我的WEB应用程序中的任何地方使用.我正在执行扫描的注释是@javax.persistence.Entity,但我也尝试了自定义注释,结果相同.
@SupportedAnnotationTypes("javax.persistence.Entity")
@SupportedSourceVersion(SourceVersion.RELEASE_8)
public class RepositoryFactory extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (Element e : roundEnv.getElementsAnnotatedWith(Entity.class)) {
if (e.getKind() != ElementKind.CLASS) {
continue;
}
// TODO: implement logic to skip manually implemented Repos
try {
String name = e.getSimpleName().toString();
TypeElement clazz = (TypeElement) e;
JavaFileObject f = …Run Code Online (Sandbox Code Playgroud) 我正在询问并回答这个问题以供将来参考,因为我认为我找到了一个解决DbUnit常见问题的合适解决方案.我希望它能帮到某个人,某个地方.
我正在使用DbUnit 2.5.0和TestNG 6.8.8.我的用例是包含3个实体的数据库的一部分.有一个ServiceUser持有a Administrable和a 的外键UserGroup.
我按照http://city81.blogspot.com/2011/03/testing-jpa-entities-using-dbunit.html上的大部分代码示例进行了操作.
public abstract class AbstractDatabaseTest {
protected EntityManager em; // initialized elsewhere
private IDatabaseConnection connection;
private IDataSet dataset;
@BeforeClass
private void setupDatabaseResource() throws Exception {
// using Hibernate
connection = new DatabaseConnection(((SessionImpl) (em.getDelegate())).connection());
connection.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new HsqldbDataTypeFactory());
// full database export
IDataSet fullDataSet = connection.createDataSet();
final String datasetPath = String.format("%s%s", RESOURCE_FOLDER, "Testing.xml");
FlatXmlDataSet.write(fullDataSet, new FileOutputStream(datasetPath));
FlatXmlDataSetBuilder flatXmlDataSetBuilder = new FlatXmlDataSetBuilder();
flatXmlDataSetBuilder.setColumnSensing(true);
dataset = flatXmlDataSetBuilder.build(new …Run Code Online (Sandbox Code Playgroud) 我的目标是测试一个类是否将其中一个属性设置为随机整数值.我在网上找到了一个卡方检验算法,并决定将其投入使用.我对结果感到非常惊讶:我的样本量越大,测试似乎越不可能通过.我应该说我绝不是一个统计专家(我问这个问题可能是不言而喻的)所以我可能在这里弄错了.
测试结果仅变化最终的int SIZE(in UserTest).每次测试都跑了30次:
SIZE avg results
11 25.4 26, 25, 22, 24, 30
20 25 26, 26, 24, 22, 27
30 24 24, 22, 24, 26, 24
100 19.4 17, 23, 20, 18, 19
200 16.2 15, 18, 18, 15, 15
1000 13.2 13, 13, 14, 13, 13
10000 10 14, 7, 8, 10, 11
Run Code Online (Sandbox Code Playgroud)
虽然在这种情况下我并不是绝对必须拥有真正的随机性,但我仍然对这个问题是什么感到好奇.这本身就是一个错误的算法,我错误地使用它,"使测试更难"的自然结果(统计noob,还记得),还是我在推动Java伪随机生成器的界限?
域类:
public class User
{
public static final int MINIT = 20;
public static final int MAXIT = 50;
private int …Run Code Online (Sandbox Code Playgroud) 我正在深入研究Java 8创新,我正在尝试调用我在高级接口中实现的默认方法,即使子类重写它也是如此.我可以毫不费力地回到Comparator我的BusinessLogic班级实现一个,但我想知道是否有一些魔法可以让我使用漂亮的新东西::.
码:
public interface IdEntity extends Comparable<IdEntity> {
int getId();
@Override
default int compareTo(IdEntity other) {
return getId() - other.getId();
}
}
public class Game implements IdEntity {
@Override
public int compareTo(IdEntity o) {
if (o instanceof Game) {
Game other = (Game) o;
int something;
// logic
return something;
}
return super.compareTo(o);
}
}
public class BusinessLogic {
private void sortList(List<? extends IdEntity> list) {
// for Game, Game::compareTo gets called but …Run Code Online (Sandbox Code Playgroud) java ×4
jpa ×2
algorithm ×1
dbunit ×1
inheritance ×1
java-8 ×1
javacompiler ×1
lambda ×1
maven ×1
mysql ×1
random ×1
statistics ×1
testng ×1
unit-testing ×1