[英]NUnit C# using DllImport for an unmanaged dll throws BadImageFormatException
我是NUnit的新手(實際上是一般的單元測試),我正在嘗試為我正在研究的一些小事情編寫一些測試。
我正在做的是嘗試為libspotify編寫包裝器庫。
我要測試的一個示例是:
/// <summary>
/// The connection state of the specified session.
/// </summary>
/// <param name="sessionPtr">Pointer to Session object</param>
/// <returns>The connection state - see the ConnectionStateE enum for possible values</returns>
[DllImport("libspotify")]
internal static extern ConnectionStateE sp_session_connectionstate(IntPtr sessionPtr);
/// <summary>
/// The connection state of the session
/// </summary>
public ConnectionStateE GetConnectionState()
{
__CheckIsNotDisposed();
return sp_session_connectionstate(this.Ptr);
}
然后測試本身(在一個單獨的項目中,相同的解決方案)
[Test]
public void TestSessionInitializeDisconnected()
{
using (var sess = new Session())
{
Assert.AreEqual(sess.ConnectionState, myLibSpotify.Enums.ConnectionStateE.DISCONNECTED);
}
}
誠然,該測試可能不是最有用的,但目前尚不相關。 我遇到的問題是,當我嘗試運行測試NUnit時,顯示了以下異常:
SpecTests.TestSessionBasics.TestSessionInitializeDisconnected:
System.BadImageFormatException : An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
我猜我在這里已經忽略了一些東西,但是Google搜尋並沒有真正的幫助,因為我似乎只是為了測試c ++ / cli或其他沒有真正幫助的結果而找到了結果。
任何幫助,將不勝感激。 謝謝。
解決方案是運行NUnit的32位二進制文件,而不是x64機器上默認的64位。
我使用的外部庫的原因顯然是針對x86(32位)進行編譯的,因此無法與從64位環境中調用的代碼很好地配合使用。
正如@HansPassant所提到的,解決方案來自以下問題: 64位計算機上的nUnit異常
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.