किसी कारण से, @Value
एनोटेशन को मेरी कक्षा में इंजेक्शन नहीं दिया जा रहा है जिसे मैं अन्य टेस्ट क्लास के लिए आधार के रूप में उपयोग कर रहा हूं। मैं वसंत के लिए नया हूं और जावा का मेरा ज्ञान अभी तक सबसे अच्छा नहीं है। मुझे यकीन है कि यह अधिक अनुभव वाले किसी के लिए अधिक स्पष्ट होगा, लेकिन मैं इसे समझ नहीं सकता।@ बेस टेस्ट क्लास में वैल्यू एनोटेशन गुण फ़ाइल से मूल्य इंजेक्शन नहीं दे रहे हैं
यदि मैं setDbProperties()
विधि पर टिप्पणी करता हूं, तो फ़ील्ड आबादी में हैं, लेकिन @Value
अकेले एनोटेशन के साथ, मुझे फ़ील्ड में शून्य मान मिलते हैं।
package com.blah;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
import org.dbunit.DBTestCase;
import org.dbunit.PropertiesBasedJdbcDatabaseTester;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import org.dbunit.operation.DatabaseOperation;
import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath:/WEB-INF/application-context.xml",
"classpath:/WEB-INF/application-context-test.xml" })
@ActiveProfiles("test")
public abstract class BaseDbTestCase extends DBTestCase {
@Value("${test.db.connection.url}")
private String connectionUrl;
@Value("${test.db.driver.class}")
private String driverClass;
@Value("${test.db.username}")
private String dbUserName;
@Value("${test.db.password}")
private String dbPassword;
@Value("${test.db.datasource.path}")
private String dataSource;
public BaseDbTestCase(String name) throws IOException {
super(name);
// setDbProperties();
System.setProperty(
PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS,
driverClass);
System.setProperty(
PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL,
connectionUrl);
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME,
dbUserName);
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD,
dbPassword);
}
@After
public void after() throws Exception {
DatabaseOperation.DELETE_ALL.execute(getConnection(), getDataSet());
}
@Override
protected IDataSet getDataSet() throws Exception {
return new FlatXmlDataSetBuilder()
.build(new FileInputStream(dataSource));
}
private void setDbProperties() throws IOException, FileNotFoundException {
Properties properties = new Properties();
properties.load(new FileInputStream(
"src/main/java/resources/application.properties"));
connectionUrl = properties.getProperty("test.db.connection.url");
driverClass = properties.getProperty("test.db.driver.class");
dbUserName = properties.getProperty("test.db.username");
dbPassword = properties.getProperty("test.db.password");
dataSource = properties.getProperty("test.db.datasource.path");
}
@Override
protected DatabaseOperation getSetUpOperation() throws Exception {
return DatabaseOperation.REFRESH;
}
@Override
protected DatabaseOperation getTearDownOperation() throws Exception {
return DatabaseOperation.NONE;
}
@Before
public void init() throws Exception {
DatabaseOperation.REFRESH.execute(getConnection(), getDataSet());
}
}
आप देख सकते हैं, अन्य स्प्रिंग (और गैर-स्प्रिंग) एनोटेशन इस वर्ग में काम कर रहे हैं:
यहाँ मेरी आधार परीक्षण क्लास है।
मेरे पास मेरे आवेदन संदर्भ में <context:property-placeholder location="classpath:/resources/application.properties" />
है।
इसके अलावा, @Value
एनोटेशन कक्षाओं में ठीक काम कर रहे हैं जो BaseDbTestCase
कक्षा का विस्तार करते हैं।
TIA
अद्यतन: @ बीजू के सुझाव लेने init() विधि (@Before
साथ एनोटेट) करने के लिए प्रणाली संपत्तियों की सेटिंग स्थानांतरित करने के लिए के बाद, मैं अब निम्नलिखित स्टैक ट्रेस हो रही है। डिबगिंग के आधार पर, त्रुटि को फेंकने से पहले यह कन्स्ट्रक्टर से पहले प्रतीत नहीं होता है।
org.dbunit.assertion.DbAssertionFailedError: driverClass is null
at org.dbunit.assertion.DefaultFailureHandler$DefaultFailureFactory.createFailure(DefaultFailureHandler.java:265)
at org.dbunit.assertion.DefaultFailureHandler.createFailure(DefaultFailureHandler.java:110)
at org.dbunit.assertion.SimpleAssert.fail(SimpleAssert.java:90)
at org.dbunit.assertion.SimpleAssert.assertTrue(SimpleAssert.java:77)
at org.dbunit.assertion.SimpleAssert.assertNotNullNorEmpty(SimpleAssert.java:61)
at org.dbunit.JdbcDatabaseTester.<init>(JdbcDatabaseTester.java:103)
at org.dbunit.PropertiesBasedJdbcDatabaseTester.<init>(PropertiesBasedJdbcDatabaseTester.java:68)
at org.dbunit.DBTestCase.newDatabaseTester(DBTestCase.java:70)
at org.dbunit.DatabaseTestCase.getDatabaseTester(DatabaseTestCase.java:109)
at org.dbunit.DatabaseTestCase.setUp(DatabaseTestCase.java:151)
at junit.framework.TestCase.runBare(TestCase.java:132)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:243)
at junit.framework.TestSuite.run(TestSuite.java:238)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
मुझे एक ही समस्या है। क्या आपको समाधान मिल सकता है? –