タグ付けされた質問 「junit」

2
オンライン機能を備えた単体テストクラス
オンライン機能を必要とするプライベート機能を持つクラスの機能を単体テストするとき。それをどのようにテストしますか? 例えば: public class Foo { public int methodA() { int val = goOnlineToGetVal(); return val; } private int goOnlineToGetVal() { CloudService c = new CloudService(); int oval = c.getValueFromService(); return oval; } } 機能をテストする場合、「methodA()」は「goOnlineToGetVal()」を使用しようとしますが、このテストが機能なしで実行された場合、オンラインに移行しようとします。オンラインに接続せずに、どのように100%のクラスをカバーしますか

4
コードカバレッジを劇的に改善する方法は?
ユニットテストの下でレガシーアプリケーションを取得することを任されています。アプリケーションに関する最初の背景:これらの主要な問題を伴う600k LOC Java RCPコードベースです。 大規模なコードの複製 カプセル化なし、ほとんどのプライベートデータは外部からアクセスできます。ビジネスデータの一部はシングルトンにもなっているため、外部からだけでなくどこからでも変更できます。 抽象化なし(たとえば、ビジネスモデルなし、ビジネスデータはObject []およびdouble [] []に格納されます)。したがって、OOはありません。 優れた回帰テストスイートがあり、効率的なQAチームがバグのテストと発見を行っています。マイケル・フェザーズなどの古典的な本からテストする方法を知っていますが、それは遅すぎます。実用的なリグレッションテストシステムがあるので、ユニットテストを作成できるようにシステムを積極的にリファクタリングすることを恐れていません。 迅速にカバレッジを得るために、どのように問題を攻撃し始める必要がありますか?そうすれば、経営陣に進捗を示すことができます(実際には、JUnitテストのセーフティネットから収益を上げることができます)?AgitarOneなどの回帰テストスイートを生成するツールを使用したくないのは、これらのテストは何かが正しいかどうかをテストしないためです。

5
voidメソッドの単体テスト
アプリケーションのバグを修正するために、postLoginという名前の既存のメソッドに呼び出しを追加することにより、という名前のメソッドを変更しましたgetShoppingCart。 コード protected void postLogin() { getShoppingCart(); } ただし、単体テストを作成する最適な方法が何であるかはわかりませんpostLogin。 アプローチ1 Mockitoのverifyを使用して、メソッドが呼び出されたことを確認します。 verify(mock).getShoppingCart(); アプローチ2 ユーザーのショッピングカートの値を取得して、メソッド呼び出しの副作用をテストします。 AssertNotNull(user.getShoppingCart()); 1つのアプローチは他のアプローチよりも優れていますか?


3
モックコンクリートクラス-非推奨
私は、「Growing Object-Oriented Software」の本の抜粋を読んだところです。これは、具象クラスのモックが推奨されない理由を説明しています。 以下に、MusicCentreクラスの単体テストのサンプルコードを示します。 public class MusicCentreTest { @Test public void startsCdPlayerAtTimeRequested() { final MutableTime scheduledTime = new MutableTime(); CdPlayer player = new CdPlayer() { @Override public void scheduleToStartAt(Time startTime) { scheduledTime.set(startTime); } } MusicCentre centre = new MusicCentre(player); centre.startMediaAt(LATER); assertEquals(LATER, scheduledTime.get()); } } そして彼の最初の説明: このアプローチの問題は、オブジェクト間の関係が暗黙的に残されることです。モックオブジェクトを使用したテスト駆動開発の目的は、オブジェクト間の関係を発見することであることを明確にしたことを願っています。サブクラスを作成する場合、ドメインコードにはそのような関係を表示するものはなく、オブジェクトのメソッドだけです。これにより、この関係をサポートするサービスが他の場所に関連しているかどうかを確認するのが難しくなり、次回クラスで作業するときに分析をやり直す必要があります。 彼が言うとき、彼が何を意味するのか正確に理解することはできません。 これにより、この関係をサポートするサービスが他の場所に関連しているかどうかを確認するのが難しくなり、次回クラスで作業するときに分析をやり直す必要があります。 サービスはMusicCentreのメソッドに対応することを理解していますstartMediaAt。 「他の場所」とはどういう意味ですか? …

3
ユニットテストを手作業で書くのは例による証明ですか?
JUnitテストの記述は、コードを介した1つの特定のパスを示すことを知っています。 私の仲間の一人がコメントしました: 単体テストを手動で作成することは、例による証明です。 彼は、Quickcheckのようなツールと型を使用したプログラムの動作を推論する機能を備えたHaskellのバックグラウンドから来ていました。 彼の含意は、あなたのコードがテストされていないこの方法で試されない他の入力の組み合わせがたくさんあるということでした。 私の質問は次のとおりです。手動でユニットテストを記述しているかどうかは、例によって証明されますか?

3
サービス層とDAO層のあるアプリケーションのテストでは、何をモックする必要がありますか?
私のクラスはこの構造に従っています サービス層(InputDTOを作成してDBデータにマップ) DAO層(実際にDB呼び出しを実行します) サービス層のJUnitテストを作成すると、DAO層が呼び出され、実際のDB接続とDBからのデータの取得が期待されます。 DAO層をサービス層から完全にモックする必要がありますか、それともDB接続とDBから受信したデータをモックする必要がありますか? 次に、アプリはキャッシュから特定のデータを期待します。 JUnitランタイムの場合、キャッシュがないので、これをどのように処理する必要がありますか?サービス層メソッドには、詳細を取得するためのキャッシュの検索が含まれます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.