1 /*
2 * Copyright 2002-2016 the original author or authors
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 package com.github.springtestdbunit.annotation;
18
19 import java.lang.annotation.Documented;
20 import java.lang.annotation.ElementType;
21 import java.lang.annotation.Inherited;
22 import java.lang.annotation.Repeatable;
23 import java.lang.annotation.Retention;
24 import java.lang.annotation.RetentionPolicy;
25 import java.lang.annotation.Target;
26
27 import org.dbunit.dataset.IDataSet;
28 import org.dbunit.dataset.filter.IColumnFilter;
29
30 import com.github.springtestdbunit.DbUnitTestExecutionListener;
31 import com.github.springtestdbunit.assertion.DatabaseAssertionMode;
32 import com.github.springtestdbunit.dataset.DataSetModifier;
33
34 /**
35 * Test annotation that can be used to assert that a database is in given state after tests have run.
36 *
37 * @see DbUnitTestExecutionListener
38 *
39 * @author Phillip Webb
40 * @author Mario Zagar
41 */
42 @Documented
43 @Inherited
44 @Retention(RetentionPolicy.RUNTIME)
45 @Target({ ElementType.TYPE, ElementType.METHOD })
46 @Repeatable(ExpectedDatabases.class)
47 public @interface ExpectedDatabase {
48
49 /**
50 * The name of the connection that should be used when verifying data. Can refer to a connection specified in
51 * {@link DbUnitConfiguration @DbUnitConfiguration} or left blank to use the default connection.
52 * @return the connection
53 */
54 String connection() default "";
55
56 /**
57 * Provides the location of the dataset that will be used to test the database.
58 * @return The dataset locations
59 * @see DbUnitConfiguration#dataSetLoader()
60 */
61 String value() default "";
62
63 /**
64 * Database assertion mode to use. Default is {@link DatabaseAssertionMode#DEFAULT}.
65 * @return Database assertion mode to use
66 */
67 DatabaseAssertionMode assertionMode() default DatabaseAssertionMode.DEFAULT;
68
69 /**
70 * Optional table name that can be used to limit the comparison to a specific table.
71 * @return the table name
72 */
73 String table() default "";
74
75 /**
76 * Optional SQL to retrieve the actual subset of the table rows from the database. NOTE: a {@link #table() table
77 * name} must also be specified when using a query.
78 * @return the SQL Query
79 */
80 String query() default "";
81
82 /**
83 * If this expectation overrides any others that have been defined at a higher level. Defaults to {@code true}
84 * @return if this annotation overrides any others
85 */
86 boolean override() default true;
87
88 /**
89 * A set of {@link DataSetModifier} that will be applied to the {@link IDataSet} before it is used. Can refer to a
90 * static or inner class of the test.
91 * @return the modifiers to apply
92 */
93 Class<? extends DataSetModifier>[] modifiers() default {};
94
95 /**
96 * A set of {@link org.dbunit.dataset.filter.IColumnFilter} that will be applied to column comparison when using
97 * non-strict {@link DatabaseAssertionMode}.
98 * <p>
99 * Specify this when you want to use DTD with your expected dataset XML file but want to exclude some columns from
100 * comparison.
101 * @return column filters to apply
102 */
103 Class<? extends IColumnFilter>[] columnFilters() default {};
104 }