我目前擁有使用MSTest亞軍的大約1000個單元/集成測試的解決方案。林與AutoMapper遇到的問題是,當我有VS運行的解決方案的所有測試中,我會隨機得到一些單元測試失敗是由於以下automapper例外:AutoMapper在運行大量測試時會混淆地圖嗎?
AutoMapper.AutoMapperMappingException:
Mapping types:
String -> String
System.String -> System.String
Destination path:
CatalogResource.CultureCode
Source value:
en-US ---> System.InvalidCastException: Unable to cast object of type 'Model.Catalog' to type 'Model.CatalogResource'.
在代碼中,我沒有一個目錄CatalogResource地圖也不是我試圖將它們映射到對方。這種類型的異常不會發生在PROD中,不會發生在集成測試中,每次運行測試時都不會發生,並且當它發生時,總是會有不同的測試失敗。另外,如果我只運行剛剛失敗的測試,它們總是會通過。我很難在本地持續重現這一點,但是它在構建服務器上更頻繁地發生,這很痛苦,因爲它阻止構建自動升級到下一個環境。
我也嘗試添加這測試卻一直沒有解決的問題:
[ClassInitialize]
public static void ClassInitialize(TestContext context)
{
Mapper.Reset();
}
任何想法?我們有4個不同的人刺傷了這個無濟於事,所以我現在求助於你們偉大的人們尋求幫助。
謝謝!
編輯:
我目前使用初始化被調用該服務的靜態構造函數中的靜態類的配置。 I.E.
static MyService()
{
AutoMapperBootstrapper.Initialize();
}
...
internal static class AutoMapperBootstrapper
{
public static void Initialize()
{
ConfigureMappings();
#if DEBUG
Mapper.AssertConfigurationIsValid();
#endif
}
}
編輯#2:
雖然今天做一些修修補補,我注意到,這些隨機故障爲<IDataReader, something else>
地圖纔會發生。例如:
Mapper.CreateMap<IDataReader, Catalog>()
.ForMember(m => m.CatalogID, opt => opt.MapFrom(src => src["CatalogID"]))
.ForMember(m => m.Title, opt => opt.MapFrom(src => src["Title"]))
.ForMember(m => m.DateCreatedUTC, opt => opt.MapFrom(src => src["DateCreatedUTC"]))
.ForMember(m => m.DateModifiedUTC, opt => opt.MapFrom(src => src["DateModifiedUTC"]))
...
不知道該用它來做什麼還沒有,但它似乎相關。
如何初始化AutoMapper配置(通過配置文件,在應用程序啓動時,IoC等)?你用[AssertConfigurationIsValid](https://github.com/AutoMapper/AutoMapper/wiki/Configuration-validation)檢查你的映射嗎? – Mightymuke
我在問題中添加了一個編輯。是的,我聲稱配置和Im通過該服務的靜態構造函數初始化它。謝謝! –