我的会计示例有什么问题?计算器bean没有注入Accoount。存款方法中存在空指针异常,因为计算器为空。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:/META-INF/spring/context.xml")
public class DITestJavaTest extends Assert {
@Test
public void diTest() {
Account account = new Account(500);
account.deposit(500);
assertEquals("balance is 1000", 1000, account.getBalance(), 0.0001);
}
}
public class Account {
@Autowired
private ICalculator calculator;
private double balance;
public Account() {
balance = 0;
}
public Account(double balance) {
this.balance = balance;
}
public void deposit(double amount) {
balance = calculator.add(balance, amount);
}
public void withdraw(double amount) {
balance = calculator.subtract(balance, amount);
}
public double getBalance() {
return balance;
}
}
@Component
public class Calculator implements ICalculator {
@Override
public double add(double summand1, double summand2) {
System.out.println("Main implementation with " + Calculator.class.getName() + "addition");
BigDecimal result = round(summand1 + summand2);
return result.doubleValue();
}
@Override
public double subtract(double minuend, double subtrahend) {
System.out.println("Main implementation with " + Calculator.class.getName() + "subtraction");
BigDecimal result = round(minuend - subtrahend);
return result.doubleValue();
}
private BigDecimal round(double amount) {
return new BigDecimal(amount).setScale(2, BigDecimal.ROUND_HALF_UP);
}
}
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="org.example.banking" />
<context:annotation-config />
</beans>
答案 0 :(得分:2)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:/META-INF/spring/context.xml")
public class DITestJavaTest extends Assert {
@Autowired
Account account
@Test
public void diTest() {
account.deposit(500);
account.deposit(500);
assertEquals("balance is 1000", 1000, account.getBalance(), 0.0001);
}
}
不要在测试中初始化帐户。这种方式不是由Spring管理的,Calculator
从未注入
根据建议,使用Account
@Component
答案 1 :(得分:0)
您还需要注释Account
类,告诉spring它包含带注释的成员。
像
这样的东西@Component
public class Account { ... }