2013-05-03 135 views
0

我在寫單元測試,並且有一個相當複雜的設置。我如何將「nulls」注入自動佈線的彈簧豆?

依賴bean設置一些偵聽器並將它們傳遞給自動裝配的服務。

我想測試一下偵聽器是否存在,但不會調用它們,所以我想通過'null'而不是autowired服務。 (具體是:我沒有制定者...)

@Autowired 
SomeService1 service1 

@Autowired 
SomeService2 service2 


public List getListeners() { 
    List l = new ArrayList(); 
    l.add(new AaaListener(service1)); 
    l.add(new BbbListener(Service2)); 
    return l; 
} 

@Test 
public void testListeners() { 
    int exptecedSize = 2; 

    sut.doSomething(); 

    List l = sut.getX().getY().getListeners() 

    assertEquals(expectedSize,l.size()); 
} 

注意,SUT確實間接地從返回聽衆類的依賴。

由於這是一個非常小的例子,來自一個大的設置,我做了具體的不想在這裏使用模擬因爲我想測試只存在不是聽衆的行爲。

嘲笑這樣的服務20或30會大大減緩測試。

問題:將這些空值注入自動佈線實例變量的最簡單方法是什麼?

A)添加setters?

B)ReflectionUtils?

C)java-config + @Beans + return null?

+0

回答過的問題在這裏: http://stackoverflow.com/questions/3279868/how-to-turn-spring-autowired-required-property-to-false-for-test – Bastl 2013-05-03 09:40:44

回答

1

當類被實例化時它們已經是null ......或者你是否真的在春天的環境中運行它們?

您可以設置屬性的XML配置如下(從documentation)爲空

<bean class="ExampleBean"> 
    <property name="email"><null/></property> 
</bean> 
+0

是的,他們在自動佈線的春天背景下。我有大約100個豆子手動設置測試,我沒有抓住它。我很不情願地從頭開始寫一個spring.xml ... – Bastl 2013-05-03 08:54:26

+0

爲什麼不能讓他們注入任何存在的實現呢? – blank 2013-05-03 09:41:42

+0

它太大了:數百個spring.xmls,數千個bean,混合的建築風格...: - / – Bastl 2013-05-03 11:00:58

1
  1. 不要使用Spring上下文和創建類手動
  2. 使用ReflectionTestUtils設置領域。 ReflectionTestUtils允許設置私人字段,其中ReflectionUtils不允許。