タグ付けされた質問 「unit-testing」

ユニットテストは、ソースコードの個々のユニットをテストして、それらが使用に適しているかどうかを判断する方法です。

14
Javaに最適なモックフレームワークは何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。事実、参考文献、専門知識によって回答が裏付けられることを期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 Javaでモックオブジェクトを作成するための最良のフレームワークは何ですか?どうして?各フレームワークの長所と短所は何ですか?

7
データベース駆動型アプリケーションの単体テストの最良の戦略は何ですか?
私は、バックエンドでさまざまな複雑さのデータベースによって駆動される多くのWebアプリケーションを使用しています。通常、ビジネスロジックやプレゼンテーションロジックとは別のORMレイヤーがあります。これにより、ビジネスロジックの単体テストがかなり簡単になります。物事は個別のモジュールに実装することができ、テストに必要なデータはオブジェクトのモッキングによって偽造できます。 しかし、ORMとデータベース自体のテストには、常に問題と妥協が伴います。 長年にわたって、私はいくつかの戦略を試しましたが、どれも完全に満足しませんでした。 既知のデータを含むテストデータベースを読み込みます。ORMに対してテストを実行し、適切なデータが返されることを確認します。ここでの不利な点は、テストDBがアプリケーションデータベースのスキーマの変更に対応しなければならず、同期が取れなくなる可能性があることです。また、人為的なデータに依存しており、愚かなユーザー入力が原因で発生するバグを公開しない場合があります。最後に、テストデータベースが小さい場合、インデックスの欠落などの非効率性は明らかになりません。(最後の1つは、実際に単体テストを使用する目的ではありませんが、問題はありません。) 本番データベースのコピーをロードし、それに対してテストします。ここでの問題は、いつでも本番データベースの内容がわからない可能性があることです。データが時間とともに変化する場合、テストを書き直す必要があるかもしれません。 一部の人々は、これらの戦略の両方が特定のデータに依存しており、単体テストでは機能のみをテストする必要があると指摘しています。そのために、私は提案を見てきました: モックデータベースサーバーを使用し、ORMが特定のメソッド呼び出しに応答して正しいクエリを送信していることのみを確認します。 データベース駆動型アプリケーションをテストする場合、どのような戦略を使用しましたか(ある場合)。あなたにとって何が一番効果的でしたか?




4
Moqにタスクを返すように指示するにはどうすればよいですか?
宣言するインターフェースを持っています Task DoSomethingAsync(); 私のテストではMoqFrameworkを使用しています: [TestMethod()] public async Task MyAsyncTest() { Mock<ISomeInterface> mock = new Mock<ISomeInterface>(); mock.Setup(arg => arg.DoSomethingAsync()).Callback(() => { <my code here> }); ... } 次に、テストでを呼び出すコードを実行しますawait DoSomethingAsync()。そして、テストはその行で失敗します。何が悪いのですか?

7
Mockito:メソッド内で作成されたオブジェクトでメソッドが呼び出されたことを確認する方法は?
モッキートは初めてです。 以下のクラスが与えられた場合、どのようにしてMockitoを使用して、someMethod呼び出された直後fooに呼び出されたかを確認できますか? public class Foo { public void foo(){ Bar bar = new Bar(); bar.someMethod(); } } 次の確認電話をかけたいのですが、 verify(bar, times(1)).someMethod(); どこbarの嘲笑インスタンスですBar。

15
ディレクトリですべてのPython単体テストを実行するにはどうすればよいですか?
私のPythonユニットテストを含むディレクトリがあります。各単体テストモジュールの形式はtest _ *。pyです。私はall_test.pyというファイルを作成しようとしています。これは、ご想像のとおり、前述のテストフォームのすべてのファイルを実行して結果を返します。これまでに2つの方法を試しました。どちらも失敗しました。2つの方法を紹介します。実際にこれを正しく行う方法を誰かが知っていることを願っています。 私の最初の勇敢な試みのために、「ファイル内のすべてのテストモジュールをインポートして、このunittest.main()doodadを呼び出すだけで機能しますよね?」まあ、私は間違っていたことがわかりました。 import glob import unittest testSuite = unittest.TestSuite() test_file_strings = glob.glob('test_*.py') module_strings = [str[0:len(str)-3] for str in test_file_strings] if __name__ == "__main__": unittest.main() これは機能しませんでした、私が得た結果は: $ python all_test.py ---------------------------------------------------------------------- Ran 0 tests in 0.000s OK 私の2回目の試行では、まあ、まあ、多分私はこの「テスト」全体をもっと「手動」のやり方でやろうとするでしょう。だから私はそれを以下にしようとしました: import glob import unittest testSuite = unittest.TestSuite() test_file_strings = glob.glob('test_*.py') module_strings = …

20
統合テストと単体テストの違いは何ですか?
単体テストと統合テストのいわゆる教科書の定義を知っています。私が気になるのは、単体テストを作成するときです。できるだけ多くのクラスのセットをカバーするように記述します。 たとえば、Wordクラスがある場合、クラスの単体テストをいくつか記述しWordます。次に、Sentenceクラスの記述を開始します。クラスとやり取りする必要Wordがある場合は、少なくとも両方が相互作用する場所で、両方Sentenceをテストするようにユニットテストを記述することがよくありWordます。 これらのテストは、これらの2つのクラスの統合をテストするので、本質的に統合テストになりますか、それとも2つのクラスにまたがる単なる単体テストですか? 一般に、この不確実なラインのため、統合テストを実際に作成することはめったにありません...または、完成品を使用して、すべての部分が実際の統合テストで適切に機能するかどうかを確認します。個々の機能の? 統合テストを誤解していますか、それとも統合テストと単体テストの違いはほんのわずかですか?

4
Mockitoは引数に関係なくメソッドをスタブできますか?
Mockitoを使用して、いくつかのレガシーコードをテストしようとしています。 FooDao次のようにプロダクションで使用されるaをスタブ化したい: foo = fooDao.getBar(new Bazoo()); 私は書くことができます: when(fooDao.getBar(new Bazoo())).thenReturn(myFoo); しかし、明らかな問題は、メソッドをスタブしたオブジェクトとgetBar()同じBazooオブジェクトで呼び出されないことです。(そのnewオペレーターを呪いなさい!) myFoo引数に関係なくメソッドが返されるようにメソッドをスタブできたら、私はそれを気に入っています。それができない場合は、他の回避策の提案に耳を傾けますが、妥当なテストカバレッジが得られるまで、実稼働コードを変更しないようにしたいと思います。

30
プライベートメソッドを公開して単体テストを行うと…いい考えですか?
司会者注: ここにはすでに39の回答が投稿されています(一部は削除されています)。回答 を投稿する前に、ディスカッションに意味のあるものを追加できるかどうかを検討してください。あなたはたぶん他の誰かがすでに言ったことを繰り返すだけです。 ユニットテストを記述するためだけに、クラスのプライベートメソッドをパブリックにする必要がある場合があります。 通常これは、メソッドにクラス内の他のメソッド間で共有されるロジックが含まれていて、独自にロジックをテストするほうが簡単なためです。または、スレッドの問題を心配せずに同期スレッドで使用されるロジックをテストしたいという別の理由も考えられます。 。 私は本当にそれが好きではないので、他の人が自分でこれをやっているのを見つけますか?個人的には、ボーナスは、クラスの外では実際にサービスを提供しないメソッドを公開することの問題を上回ると思います... 更新 皆様のご回答ありがとうございます、人々の興味をそそられたようです。これはクラスが使用される唯一の方法であり、私はこれに同意するため、一般的なコンセンサスはパブリックAPIを介してテストを行うべきであると考えています。私が上記でこれを実行する2つのケースはまれなケースであり、それを実行することのメリットはそれだけの価値があると思いました。 しかし、誰もがそれが実際に起こるべきではないという指摘を見ることができます。そして、それについてもう少し考えると、テストに対応するためにコードを変更することは悪い考えだと思います。結局、テストはある意味でサポートツールであり、システムを「サポートツールをサポートする」ように変更するのは露骨です。悪い習慣。
301 c#  java  unit-testing 


10
C ++単体テストフレームワークの比較[終了]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 C ++単体テストフレームワークの推奨事項に関するいくつかの質問が既にあることを知っていますが、フレームワークの1つを推奨するだけで(機能)比較に関する情報を提供しないため、すべての回答が役に立たなかった。 最も興味深いフレームワークは、CppUnit、Boost、および新しいGoogleテストフレームワークだと思います。誰かがまだ比較を行っていますか?

9
pytestで例外が発生したことを適切に表明するにはどうすればよいですか?
コード: # coding=utf-8 import pytest def whatever(): return 9/0 def test_whatever(): try: whatever() except ZeroDivisionError as exc: pytest.fail(exc, pytrace=True) 出力: ================================ test session starts ================================= platform linux2 -- Python 2.7.3 -- py-1.4.20 -- pytest-2.5.2 plugins: django, cov collected 1 items pytest_test.py F ====================================== FAILURES ====================================== ___________________________________ test_whatever ____________________________________ def test_whatever(): …

10
C#でのプライベートメソッドのユニットテスト
Visual Studioでは、自動生成されたアクセサークラスを介してプライベートメソッドの単体テストを実行できます。正常にコンパイルされるプライベートメソッドのテストを作成しましたが、実行時に失敗します。コードとテストのかなり最小限のバージョンは次のとおりです。 //in project MyProj class TypeA { private List<TypeB> myList = new List<TypeB>(); private class TypeB { public TypeB() { } } public TypeA() { } private void MyFunc() { //processing of myList that changes state of instance } } //in project TestMyProj public void MyFuncTest() { TypeA_Accessor target …
291 c#  unit-testing 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.