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

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

6
Goのモック関数
私は小さな個人プロジェクトをコーディングすることで囲碁を学んでいます。小さいながら、厳密なユニットテストを行って、最初からGoの良い習慣を学ぶことにしました。 ささいな単体テストはすべて上手くできていましたが、今は依存関係に困惑しています。一部の関数呼び出しをモック呼び出しに置き換えられるようにしたい。これが私のコードのスニペットです: func get_page(url string) string { get_dl_slot(url) defer free_dl_slot(url) resp, err := http.Get(url) if err != nil { return "" } defer resp.Body.Close() contents, err := ioutil.ReadAll(resp.Body) if err != nil { return "" } return string(contents) } func downloader() { dl_slots = make(chan bool, DL_SLOT_AMOUNT) // Init the …
147 unit-testing  mocking  go 

30
Visual Studio 2013が単体テストを検出しない
Visual Studio 2013には、1つのWebプロジェクト、1つのライブラリプロジェクト、および1つの単体テストプロジェクトで構成されるシンプルなソリューションがあります。ソリューションを開いて単体テストを実行しようとすると、Visual Studioで検出されません。テストを実行するには、メニューに移動して、[テスト]-> [実行]-> [すべてのテストを実行]を選択するか、テストエクスプローラーウィンドウを開きます。これらの方法により、ビジュアルスタジオはソリューション内のテストを検出しません。 最初に単純な単体テストプロジェクトを作成してテストを実行しようとすると、Visual Studioはテストを発見し、実行できます。次に、以前のソリューションを開くと、ビジュアルスタジオがすべてのテストを検出します。ソリューションを保存しようとしましたが、最初に単体テストプロジェクトを作成せずにソリューションを閉じて再度開いた場合、Visual Studioはテストを再度検出しません。これは非常に奇妙な動作で、なぜこれが起こっているのかわかりません。 Visual Studioチームの基盤と統合されたソース管理gitを使用していたこのプロジェクトで、私は一人で働いていました。ビジュアルスタジオがユニットテストを検出しないという問題は、新しい要素がプロジェクトに到達したとき、およびソース管理オンラインでソリューションを再作成する必要があるときに始まります。これ以前は、すべてのテストは常にVisual Studioによって発見されていました。 ユニットテストの作成には、Microsoft.VisualStudio.QualityTools.UnitTestFramework dllを使用します。Visual Studioの私のバージョンは次のとおりです。MicrosoftVisual Studio Express 2013 for Webバージョン12.0.30723.00 Update3。.netフレームワークのバージョンは4.5.50938です。 私のテストはすべて次のとおりです: [TestClass] public class Service1Test { [TestMethod] public void Test1() { Assert.IsTrue(True); } }

5
NUnit Assert.ThrowsメソッドまたはExpectedException属性を使用しますか?
これらが例外をテストする2つの主な方法であると思われることを発見しました。 Assert.Throws<Exception>(()=>MethodThatThrows()); [ExpectedException(typeof(Exception))] これらのうちどれが最良でしょうか?一方が他方よりも優れている点はありますか?それとも単に個人的な好みの問題ですか?

10
@testableを使用すると、「モジュールはテスト用にコンパイルされませんでした」
Swift 2の新しい@testable宣言を使用して、クラスをテストターゲットに公開しようとしています。ただし、このコンパイラエラーが発生します。 Intervals私が公開しようとしているクラスを含むモジュールです。このエラーを取り除くにはどうすればよいですか?

3
引数に基づいてジャスミンのスパイを変更する方法はありますか?
異なるパラメーターを使用して、外部APIメソッドを2回呼び出すテストしたい関数があります。この外部APIをJasmineスパイでモックアウトし、パラメーターに基づいてさまざまなものを返したいのですが。ジャスミンでこれを行う方法はありますか?私が思いつくことができる最高のものはandCallFakeを使ったハックです: var functionToTest = function() { var userName = externalApi.get('abc'); var userId = externalApi.get('123'); }; describe('my fn', function() { it('gets user name and ID', function() { spyOn(externalApi, 'get').andCallFake(function(myParam) { if (myParam == 'abc') { return 'Jane'; } else if (myParam == '123') { return 98765; } }); }); });

30
テストエクスプローラーで実行されていないテスト
私は現在、32のユニットテストを持つソリューションに取り組んでいます。私はリシャーパーテストランナーを使用しています。すべてのテストが実行され、すべてのテストが正しいテスト結果を示しています。今同僚が私に言った、Visual Studioテストエクスプローラーを使用して彼のマシンでテストが実行されていません。彼らは私のマシンでも機能していないので、ローカルの欠落しているファイルなどを除外できます。 テストエクスプローラーにはすべての単体テストが表示されますが、[すべて実行]をクリックすると、すべてのテストがグレー表示になり、テスト実行の結果が表示されません。 すべてのテストクラスは公開されています すべてのテストクラスで[TestClass]属性が宣言されています すべてのテストメソッドが[TestMethod]属性を使用しています 生産性コードとテストプロジェクトの両方が.NET 3.5を対象としています。 私はすでにクリーンビルドに私の解決策を試してみました、および/または全て削除しているobj、bin、DebugおよびReleaseフォルダ このような行動を引き起こす可能性のあるヒントはすべて認めます。

11
角度テストが「XMLHttpRequest」で「送信」を実行できずに失敗する
Angular 4.1.0コンポーネントをテストしようとしています- export class CellComponent implements OnInit { lines: Observable<Array<ILine>>; @Input() dep: string; @Input() embedded: boolean; @Input() dashboard: boolean; constructor( public dataService: CellService, private route: ActivatedRoute, private router: Router, private store: Store<AppStore>) { } } ただし、単純な「should create」テストでは、この不可解なエラーがスローされます... NetworkError:「XMLHttpRequest」で「send」を実行できませんでした:「ng:///DynamicTestModule/module.ngfactory.js」をロードできませんでした。 だから私はこの質問を見つけました、それは問題がコンポーネントが@Input)_設定されていないparamsを持っていることを示唆しています、しかし私が私のように私のテストを変更した場合: it('should create', inject([CellComponent], (cmp: CellComponent) => { cmp.dep = ''; cmp.embedded …

7
pytest:ほぼ等しいと主張する
assert almost equal次のようなものに頼らずにフロートのpy.testを使用する方法: assert x - 0.00001 <= y <= x + 0.00001 より具体的には、フロートのペアをアンパックせずにすばやく比較するためのきちんとしたソリューションを知っていると便利です。 assert (1.32, 2.4) == i_return_tuple_of_two_floats()

6
抽象クラスのテスト
PHPUnitで抽象クラスの具象メソッドをテストするにはどうすればよいですか? テストの一部として何らかのオブジェクトを作成する必要があると思います。ただし、これのベストプラクティスや、PHPUnitでこれが許可されているかどうかはわかりません。

11
PHPUnit MockObjectsがパラメーターに基づいて異なる値を返すようにするにはどうすればよいですか?
'return value'引数に関係なく返すPHPUnitモックオブジェクトを持っています。 // From inside a test... $mock = $this->getMock('myObject', 'methodToMock'); $mock->expects($this->any)) ->method('methodToMock') ->will($this->returnValue('return value')); 私ができることは、モックメソッドに渡された引数に基づいて異なる値を返すことです。私は次のようなことを試しました: $mock = $this->getMock('myObject', 'methodToMock'); // methodToMock('one') $mock->expects($this->any)) ->method('methodToMock') ->with($this->equalTo('one')) ->will($this->returnValue('method called with argument "one"')); // methodToMock('two') $mock->expects($this->any)) ->method('methodToMock') ->with($this->equalTo('two')) ->will($this->returnValue('method called with argument "two"')); しかし、これは、モックが引数'two'で呼び出されない場合にPHPUnitが文句を言うのでmethodToMock('two')、の定義が最初の定義を上書きすると仮定します。 だから私の質問は:PHPUnitモックオブジェクトを取得して、その引数に基づいて異なる値を返す方法はありますか?もしそうなら、どのように?


6
ES6モジュールのインポートをモックする方法は?
次のES6モジュールがあります。 network.js export function getDataFromServer() { return ... } widget.js import { getDataFromServer } from 'network.js'; export class Widget() { constructor() { getDataFromServer("dataForWidget") .then(data => this.render(data)); } render() { ... } } のモックインスタンスでウィジェットをテストする方法を探していますgetDataFromServer。<script>KarmaのようにES6モジュールの代わりに個別のを使用した場合、次のようなテストを作成できます。 describe("widget", function() { it("should do stuff", function() { let getDataFromServer = spyOn(window, "getDataFromServer").andReturn("mockData") let widget = new …

4
MockitoのargumentCaptorの例
誰でも、org.mockito.ArgumentCaptorクラスの使用方法と、mockitoで提供される単純なマッチャーとの違いを示す例を教えてください。 私は提供されたmockito文書を読みましたが、それらはそれを明確に示していません。それらのどれも明確に説明することはできません。

23
単体テストを既存の本番プロジェクトに追加できますか?もしそうなら、どのように、そしてそれは価値がありますか?
運用中の既存のプロジェクトに単体テストを追加することを強く検討しています。TDD (フェイスパーム)のメリットが実際に見られるようになる前に18か月前に開始されたので、これは多くのプロジェクトを含むかなり大きなソリューションであり、単体テストの追加をどこから始めればよいかわかりません。私がこれを考慮しているのは、時々古いバグが再浮上しているように見える、またはバグが実際には修正されずに修正済みとしてチェックインされることです。単体テストは、これらの問題の発生を軽減または防止します。 SOで同様の質問を読むことで、バグトラッカーから始めて、各バグのテストケースを作成してリグレッションを防ぐなどの推奨事項を見てきました。ただし、全体像を見逃してしまい、最初からTDDを使用した場合に含まれていたはずの基本的なテストを見落としてしまうのではないかと心配しています。 既存のソリューションが適切に単体テストされ、ただ組み込まれているだけではないことを確認するために、順守すべきプロセス/ステップはありますか?どのように私はテストが良い品質のものであり、念のないことを確認することができます任意のテストの無いテストよりも優れています。 だから私も私が求めているのは何かだと思います。 運用中の既存のソリューションに取り組む価値はありますか? このプロジェクトのテストを無視し、将来の可能性のある書き換えで追加する方が良いでしょうか? より有益になるもの; 数週間かけてテストを追加したり、数週間かけて機能を追加したりしますか? (明らかに、3番目のポイントに対する答えは、管理者と開発者のどちらに話しているかに完全に依存します) バウンティの理由 奨励金を追加して、幅広い回答を引き付け、それが良いことであるという私の既存の疑いを確認するだけでなく、それに対するいくつかの正当な理由も確認します。 この質問を長所と短所で後で書き、製品の将来の開発をTDDに移行するのに何時間も費やす価値があることを経営者に示すことを目指しています。私はこの課題に取り組み、自分自身の偏見のない視点で私の推論を展開したいと思います。

11
Spring Securityを使用した単体テスト
私の会社では、Spring MVCを評価して、次のプロジェクトの1つで使用するかどうかを決定しています。これまでのところ、私は今まで見たことを気に入っています。今は、Spring Securityモジュールを調べて、それが私たちが使用できる/すべきかどうかを判断しています。 私たちのセキュリティ要件はかなり基本的なものです。ユーザーは、サイトの特定の部分にアクセスできるように、ユーザー名とパスワードを提供できる必要があります(アカウントに関する情報を取得するなど)。サイトには、匿名ユーザーにアクセスを許可するページ(FAQ、サポートなど)がいくつかあります。 私が作成しているプロトタイプでは、認証されたユーザーのSessionに "LoginCredentials"オブジェクト(ユーザー名とパスワードのみが含まれています)を格納しています。一部のコントローラは、このオブジェクトがセッションにあるかどうかを確認して、たとえばログインしたユーザー名への参照を取得します。私はこの自家製ロジックを代わりにSpring Securityで置き換えようとしています。これは、「ログインしたユーザーをどのように追跡するのか」を削除するという素晴らしい利点があります。そして「ユーザーをどのように認証するのか?」私のコントローラー/ビジネスコードから。 Spring Securityは、アプリ内のどこからでもユーザー名/プリンシパル情報にアクセスできるようにする(スレッドごとの)「コンテキスト」オブジェクトを提供しているようです... Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); ある意味、このオブジェクトは(グローバル)シングルトンなので、これは非常に非Springのようです。 私の質問はこれです:これがSpring Securityで認証されたユーザーに関する情報にアクセスする標準的な方法である場合、ユニットテストで必要なときにユニットテストで利用できるように、AuthenticationオブジェクトをSecurityContextに注入するための受け入れられた方法は何ですか?認証済みユーザー? これを各テストケースの初期化メソッドに関連付ける必要がありますか? protected void setUp() throws Exception { ... SecurityContextHolder.getContext().setAuthentication( new UsernamePasswordAuthenticationToken(testUser.getLogin(), testUser.getPassword())); ... } これは過度に冗長に見えます。もっと簡単な方法はありますか? SecurityContextHolderオブジェクト自体は、非常に非春のように思えます...

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