2013-10-31 22 views
2

我有一個單元測試,其中我嘲笑某些具有DateTime屬性的結果,該屬性在執行操作時設置 - 「CreatedOn」屬性。由於我無法創建我的結果並同時執行操作,因此我的Assert.AreEqual總是失敗。我如何測試我的兩個對象是否相同除了某些DateTime字段?Assert.AreEqual在兩個對象上,但忽略DateTime屬性

+0

你能展示你的測試方法代碼嗎?我認爲如果你嘲笑某些東西的結果,那麼你可以使用任何CreatedOn屬性值來提供任何返回值 –

回答

1

實際上有兩個選項:

  1. 變化CreatedOn創建時間,使性能賽後。根據您的API,這可能會也可能不會。
  2. 製作一個方法來檢查所有其他屬性,但忽略CreatedOn屬性。只要使用它。這實際上只是多個調用Assert.AreEqual,但是對於單個屬性,不僅僅是整個對象。
+0

這聽起來像是最簡單的解決方案,但並不健壯。我想我可能會暫時做到這一點,直到我找到一種簡單且穩健的方式。 –

1

我平時做的以下幾件事之一:

  • 您可以爲您的SUT TimeProvider依賴和使用該供應商來獲得當前的日期。這將允許您設置任何當前日期。
  • 如果您正在比較的對象是由SUT依賴項之一返回的,那麼您可以設置模擬依賴關係以返回您在測試中檢查的完全相同的對象實例。
+1

這聽起來像是最強大的解決方案,但會使實現過於複雜。 –

+0

@rushonerok不幸的是,在真正的單元測試中,你應該模擬所有的外部資源(數據庫,文件等),當前時間也是外部資源作爲配置文件,所以是的,它應該被嘲笑:) –