ソフトウェア全体で適切なパラメータを使用してメソッドが呼び出されることをテストします

マエストロ

最近、サービスのメソッドが間違ったパラメーターで呼び出されたときに問題が発生しました。なんらかの停止が発生したので、今後どうやって防ぐかを考えています。

したがって、次の方法があると仮定します。

public boolean doSomething(String param1, String param2);

このメソッドが呼び出されるたびに(サービスのどこに関係なく)、param1値が特定である(たとえば、のみString1String2ありString3、そのための有効なパラメーター値になる)ことを確認したいと思います。

たとえばユニットテストでこれを検証するためのテクノロジー/ライブラリ/ツールはありますか?

更新:受け入れられた回答が示唆するように、単体テストは動作テスト用であるため、これは単体テストでカバーすべきではありません。将来の間違った呼び出しを防ぐのは、使用するPreconditionsか、単純なパラメーターチェックだけです。

ジョン・クーゲルマン

可能であれば、テストを実行時に延期するのではなく、コンパイル時のチェックを活用する必要があります。正当な値が3つしかない場合は、おそらくではなくであるparam1必要があります。enumString

単体テストは、メソッド特定の方法で動作することを確認するためのものです。彼らはその方法をブラックボックスのように扱い、外側からそれを突く。あなたがそれがどのように呼ばれるかについて心配しているなら、彼らは助けにはなりませんここで、メソッドの内部にいて、外の世界が正常に動作していることを確認したいと考えています。これを行う方法は、メソッドの開始時に実行時の前提条件チェックを使用することです。

public boolean doSomething(String param1, String param2) {
    if (!Objects.equals(param1, "String1") &&
        !Objects.equals(param1, "String2") &&
        !Objects.equals(param1, "String3"))
    {
        throw IllegalArgumentException("param1 must be String1, 2, or 3");
    }

    ...
}

Guavaの前提条件クラスが役立つ場合があります。

public boolean doSomething(String param1, String param2) {
    Preconditions.checkArgument(
        Objects.equals(param1, "String1") ||
        Objects.equals(param1, "String2") ||
        Objects.equals(param1, "String3"),
        "param1 must be String1, 2, or 3"
    );

    ...
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ReactpropメソッドがJestで呼び出されていないことをテストします

分類Dev

RSpecを使用してコントローラーメソッドでクラスが呼び出されることをテストする方法

分類Dev

メソッド呼び出しが適切なオブジェクトで適切なメソッド名を使用していることを確認するにはどうすればよいですか?

分類Dev

xUnitを使用してメソッドが呼び出されたことをアサートします

分類Dev

JUnitテストでメソッドのメソッドパラメータとして渡されるオブジェクトのメソッド呼び出しをモックする方法

分類Dev

そのメソッドがrspecを使用して別のメソッド内で呼び出されたことをテストします

分類Dev

Rspec-ネストされたサービスが適切にインスタンス化され、このインスタンスで適切なメソッドが呼び出されることをテストする方法

分類Dev

「メソッド 'where'がnullで呼び出されました。」ファイヤーストアフラッターでstreambuilderを使用する場合

分類Dev

クラスをモックし、メソッドの呼び出しでアサートする適切な方法

分類Dev

EasyMock / PowerMockを使用してプライベートメソッド内でvoidメソッドが呼び出されたことを確認します

分類Dev

プロジェクト内の100の異なる場所から呼び出されて使用されるメソッドにパラメーターを追加する-適切なアプローチは何ですか?

分類Dev

ツイストPythonファクトリメソッドがreactorラッパーを使用しているときに呼び出されない

分類Dev

PowerMockitoを使用して、最終クラスのプライベート静的メソッドが呼び出されることを確認します

分類Dev

初期化子、コンストラクター、およびメソッド呼び出しを使用するときに、printステートメントがこの順序で実行されるのはなぜですか?

分類Dev

インスタンスメソッドにモンキーパッチを適用するときに、新しい実装からオーバーライドされたメソッドを呼び出すことができますか?

分類Dev

同じパラメーターとメソッド名を使用して、コントローラーはASP.NET CoreMVCで呼び出されるものをどのように見つけることができますか

分類Dev

queryProcessInstancesCountメソッド呼び出しを使用すると、CamundaBPMで適切な値が取得されない

分類Dev

子クラスの動的メソッドは、ラムダキャプチャで使用されると、親クラスの仮想メソッドを呼び出します/セグメンテーションフォールトが発生します

分類Dev

Moq&C#:コールバックが無効です。パラメータを使用したメソッドのセットアップでは、パラメータを使用してコールバックを呼び出すことはできません

分類Dev

パラメータとしてサブクラスのみを許可するテンプレート化されたメソッドの呼び出し

分類Dev

テストメソッド「X」が例外をスローしました:System.InvalidOperationException:マッパーが初期化されていません。適切な構成で初期化を呼び出す

分類Dev

インターフェイスを使用してコールバックメソッドが呼び出されることはありません

分類Dev

Javascriptオブジェクトに「グローバル」ゲッター/セッターメソッドを定義して、プロパティが取得/設定されるたびに呼び出されるようにすることは可能ですか?

分類Dev

ジェネリックメソッドを使用してインターフェイスでType.GetRuntimeMethodを呼び出すと、nullが返されます

分類Dev

コンストラクタまたはメソッドを呼び出そうとするときに、「this」が暗黙的にパラメータとして渡されるのはなぜですか?

分類Dev

ジェネリッククラスでジェネリックリターンを使用してメソッドを呼び出すことが、javacによって安全でないと見なされるのはなぜですか?

分類Dev

array_mapへの呼び出し可能なパラメーターとしてクラスメソッドを使用することは可能ですか?

分類Dev

別のdllのインターフェイスでImmutableArray <>を使用してメソッドを呼び出すと、System.MissingMethodExceptionがスローされます。

分類Dev

呼び出されている複数のメソッドをアサートします。コンストラクターのみが機能します

Related 関連記事

  1. 1

    ReactpropメソッドがJestで呼び出されていないことをテストします

  2. 2

    RSpecを使用してコントローラーメソッドでクラスが呼び出されることをテストする方法

  3. 3

    メソッド呼び出しが適切なオブジェクトで適切なメソッド名を使用していることを確認するにはどうすればよいですか?

  4. 4

    xUnitを使用してメソッドが呼び出されたことをアサートします

  5. 5

    JUnitテストでメソッドのメソッドパラメータとして渡されるオブジェクトのメソッド呼び出しをモックする方法

  6. 6

    そのメソッドがrspecを使用して別のメソッド内で呼び出されたことをテストします

  7. 7

    Rspec-ネストされたサービスが適切にインスタンス化され、このインスタンスで適切なメソッドが呼び出されることをテストする方法

  8. 8

    「メソッド 'where'がnullで呼び出されました。」ファイヤーストアフラッターでstreambuilderを使用する場合

  9. 9

    クラスをモックし、メソッドの呼び出しでアサートする適切な方法

  10. 10

    EasyMock / PowerMockを使用してプライベートメソッド内でvoidメソッドが呼び出されたことを確認します

  11. 11

    プロジェクト内の100の異なる場所から呼び出されて使用されるメソッドにパラメーターを追加する-適切なアプローチは何ですか?

  12. 12

    ツイストPythonファクトリメソッドがreactorラッパーを使用しているときに呼び出されない

  13. 13

    PowerMockitoを使用して、最終クラスのプライベート静的メソッドが呼び出されることを確認します

  14. 14

    初期化子、コンストラクター、およびメソッド呼び出しを使用するときに、printステートメントがこの順序で実行されるのはなぜですか?

  15. 15

    インスタンスメソッドにモンキーパッチを適用するときに、新しい実装からオーバーライドされたメソッドを呼び出すことができますか?

  16. 16

    同じパラメーターとメソッド名を使用して、コントローラーはASP.NET CoreMVCで呼び出されるものをどのように見つけることができますか

  17. 17

    queryProcessInstancesCountメソッド呼び出しを使用すると、CamundaBPMで適切な値が取得されない

  18. 18

    子クラスの動的メソッドは、ラムダキャプチャで使用されると、親クラスの仮想メソッドを呼び出します/セグメンテーションフォールトが発生します

  19. 19

    Moq&C#:コールバックが無効です。パラメータを使用したメソッドのセットアップでは、パラメータを使用してコールバックを呼び出すことはできません

  20. 20

    パラメータとしてサブクラスのみを許可するテンプレート化されたメソッドの呼び出し

  21. 21

    テストメソッド「X」が例外をスローしました:System.InvalidOperationException:マッパーが初期化されていません。適切な構成で初期化を呼び出す

  22. 22

    インターフェイスを使用してコールバックメソッドが呼び出されることはありません

  23. 23

    Javascriptオブジェクトに「グローバル」ゲッター/セッターメソッドを定義して、プロパティが取得/設定されるたびに呼び出されるようにすることは可能ですか?

  24. 24

    ジェネリックメソッドを使用してインターフェイスでType.GetRuntimeMethodを呼び出すと、nullが返されます

  25. 25

    コンストラクタまたはメソッドを呼び出そうとするときに、「this」が暗黙的にパラメータとして渡されるのはなぜですか?

  26. 26

    ジェネリッククラスでジェネリックリターンを使用してメソッドを呼び出すことが、javacによって安全でないと見なされるのはなぜですか?

  27. 27

    array_mapへの呼び出し可能なパラメーターとしてクラスメソッドを使用することは可能ですか?

  28. 28

    別のdllのインターフェイスでImmutableArray <>を使用してメソッドを呼び出すと、System.MissingMethodExceptionがスローされます。

  29. 29

    呼び出されている複数のメソッドをアサートします。コンストラクターのみが機能します

ホットタグ

アーカイブ