0

ヘルプ!

このコードは、TypeMockを使用するローカルVS2010では正常に機能しますが、NCoverを介して実行すると、ビルドサーバーでは失敗します。

私のコード:

 using (RecordExpectations expect = RecorderManager.StartRecording())
    {
74:             RequestDataLayer.GetAllUsers();
75:             expect.Return(DatabaseUsers);
                // other definitions to follow
    }

CruiseControl.Net環境で次のエラーが発生します。

Execute
TypeMock.TypeMockException: 
*** Cannot use Return in this sequence, there must be a mocked statement first
Perhaps you are trying to mock a method from mscorlib
   at TypeMock.RecordExpectations.b(String A_0)
   at TypeMock.RecordExpectations.a(String A_0)
   at TypeMock.RecordExpectations.Return(Object returnValue)
   at Request.UserSyncTest.SyncData() in UserSyncTest.cs:line 75

私がモックしようとしているメソッドのソースは次のとおりです。

public class RequestDataLayer
{
        public static User[] GetAllUsers()
        {
            // some LINQ magic to get users out of DB, then a .ToArray()
            // returns an object array
        }
}

したがって、メソッドが静的であるという事実を除けば、特別なことは何もありません。それ以来、メソッドをリファクタリングして非静的にし、このページの下部に影響を与えました。

以前にも同様の問題がありました。これは、TypeMockのIsolate <>構文を利用することと関係があり、同じシナリオに遭遇しました。テストはローカルで正常に機能しますが(Gallioテストランナーを介して)、ビルドサーバー(CC.Net)で失敗します。 、Gallio、TypeMock、NCover)。

開発ボックスとビルドボックスの両方で6.0.4.0のTypeMockを実行しています。

また、うまくいったように見えるのは、RecordExpectationsブロックの行74と75を下に移動することでした。エラーは表示されませんでしたが、メソッド呼び出しは単に黙ってモックされませんでした。

アイデアは大歓迎です。

4

3 に答える 3

4

私がこの種のものを見るとき、それは通常次のとおりです:

  • テストの順序-テストは開発ボックスでは1つの順序で実行されますが、ビルドボックスでは別の順序で実行されます。これにより、一部のフィクスチャが適切にクリーンアップされないなどの問題が明らかになります。
  • 環境の違い-32ビットビルドを実行している開発環境と64ビットビルドを実行しているビルドサーバーのようなもの。

私のブログには、これらのわかりにくい問題のトラブルシューティングガイドがあります。それを実行してみて、それらのいずれかがあなたを助けるかもしれないように見えるかどうかを確認してください。

私はこれを言います:どの器具が問題を引き起こしているのかを理解することは時々長くて苦痛なプロセスです。問題が再発するまで、ユニットテストアセンブリからすべてのフィクスチャを削除し、一度に1つずつ追加し直すところまで行きました。あなたは潜在的に少し辛抱強くなければならないでしょう。

オプションがある場合は、最新バージョンにアップグレードしてください。Typemockはリリースごとに、これらの奇妙な問題についてますます良くなり、問題は後のリリースで修正される可能性があります。

于 2011-12-06T21:46:23.420 に答える
0

免責事項私はTypemockで働いています。

テストメソッドまたはテストクラスでClearMocks属性を使用していますか?
属性を使用しているのに例外が発生する場合は、サポート
に連絡してください:typemock.comのサポート

于 2011-12-07T08:54:12.503 に答える
0

OK、問題が何であるかがわかりました。恥ずかしいことに、NAntスクリプトを介してTypeMockが適切に呼び出されませんでした。

これはまだ謎ですが、「TypeMock」が有効になっていないというエラーメッセージが表示されなかった理由は、代わりにこの奇妙な動作です。

于 2011-12-07T16:57:08.410 に答える