データベースとやり取りするAPIを使用しています。この API には、要素を照会、ロード、およびデータベースに保存するためのメソッドがあります。新しいインスタンスの作成などを行う統合テストを作成し、そのインスタンスに対してクエリを実行すると、正しいインスタンスが見つかることを確認しました。これで問題ありません。
このコードの単体テストをより高速に実行したいと考えていますが、単体テストの有用性と、実際に何かが得られるかどうか疑問に思っています。たとえば、API を介してある要素を保存するためのクラスがあるとします。これは疑似コードですが、私が使用している API がどのように機能するかを理解してください。
public class ElementSaver
{
private ITheApi m_api;
public bool SaveElement(IElement newElement, IElement linkedElement)
{
IntPtr elemPtr = m_api.CreateNewElement()
if (elemPtr==IntPtr.Zero)
{
return false;
}
if (m_api.SetElementAttribute(elemPtr,newElement.AttributeName,newElement.AttributeValue)==false)
{
return false;
}
if (m_api.SaveElement(elemPtr)==false)
{
return false;
}
IntPtr linkedElemPtr = m_api.GetElementById(linkedElement.Id)
if (linkedElemPtr==IntPtr.Zero)
{
return false;
}
if (m_api.LinkElements(elemPtr,linkedElemPtr)==false)
{
return false;
}
return true;
}
}
m_api メンバーをモックする単体テストを書く価値はありますか? さまざまな呼び出しのいずれかが失敗した場合に false が返されること、およびさまざまな呼び出しがすべて成功した場合に true が返されることをテストできるようです。さまざまなメソッドが期待されるパラメーターで呼び出されるという期待を設定できますが、これは便利ですか?このコードをリファクタリングして、API のいくつかのわずかに異なるメソッドを使用しても同じ結果が得られるようにすると、テストが中断され、テストを変更する必要があります。このもろさはあまり役に立たないようです。
このようなコードの単体テストを気にするべきですか、それとも私が持っている統合テストに固執するべきですか?