從 Github 取得 ServiceStack.Text 想幫忙修 Bug。專案使用 NUnit 跑單元測試,為方便測試,在 Visual Studio 2017 安裝 NUnit 3 Test Adapter,安裝後可由 Test Explorer 直接執行測試。

不料,編譯後 Test Explorer 只找到一項測試,Output / Tests 則出現大量 OutOfMemoryException:

Exception System.OutOfMemoryException, Exception converting ServiceStack.Text.Tests.XmlSerializerTests.serialize_Territory
已發生類型 'System.OutOfMemoryException' 的例外狀況。

爬文找到解法,原因出在 NUnit 還不支援 .NET Core 使用的新版 Portable PDB 格式(未來的新標準),而 ServiceStack.Text.Tests 是一個 .NET Core 專案(同時支援 net45 與 netcoreapp1.0),.NET Core 版本的 PDB 導致問題。解決方法是在 csproj 中加入以下 PropertyGroup,指定當 Target 不等於 netcoreapp1.0 時 DebugType = Full 以產生 Windows 版 PDB:(預設 DebugType 為 Portable,Full 應源自 Full Framework,不是指完整版 PDB,參考

  <PropertyGroup>
    <DebugType Condition="'$(TargetFramework)' != '' AND '$(TargetFramework)' != 'netcoreapp1.0'">Full</DebugType>
  </PropertyGroup>

加入設定後,Test Explorer 順利找到測試項目並成功跑完,綠燈!


Comments

# by Tom

不知道大大修哪個問題? 我用這個lib解析TWSE的收盤數據csv檔,會有解析結果和excel不同的狀況,原因是twse csv內的雙引號數量未對稱造成,但是excel可以正確解讀

# by Jeffrey

to Tom, 我遇到的問題也是因特殊符號導致讀取結果不符預期,你如果能提供可重現問題的字串範例,我一併納入測試範圍。

# by Tom

找到大大你在 GitHub 的 Fork 了, 可惜沒有 issue 功能讓我提供檔案和測試資訊, 我只能寫在這邊了 http://www.twse.com.tw/exchangeReport/MI_INDEX?response=csv&date=20170526&type=ALLBUT0999 拿到這個 csv 後我是用 CsvReader.ParseLines(csv_data); 逐行拆解, 但是到了 140 行之後就無法拆解, 會把後面所有資料變成第 141 行結束....但用 excel 可以解析到 1157 行 報案以上~~

# by Jeffrey

to Tom, 問題出在141行未遵守CSV規範將包在雙引號中的雙引號置換成兩個雙引號: ( 參考:https://goo.gl/2zk3SP ) ""漲跌價差"為當日收盤價與前一日收盤價比較。", 理論上應寫成 """漲跌價差""為當日收盤價與前一日收盤價比較。", 由於不符規範,導致後面判讀全錯。依我的認知,ServiceStack.Text應不會為了包容無效格式修改程式,這類狀況理應請源頭修正(甘五摳零?),如果源頭不動如山,只好摸摸鼻子自己洗資料。

# by Tom

源頭應該不會鳥我,哭 感謝黑大幫我花了時間診斷

Post a comment