web-dev-qa-db-ja.com

言語に依存しない単体テストフレームワークはありますか?

私は常に作業コードの書き換えに懐疑的でした。コードの移植はこれに例外ではありません。ただし、TDDと自動テストの登場により、コードを書き直してリファクタリングする方がはるかに合理的です。

古いコードの移植に使用できるTDDツールがあるかどうか誰かが知っていますか?理想的には、次のことを実行できます。

  1. 合格した(またはバグを見つけた場合は失敗する)古いコードの言語に依存しない単体テストを作成します。
  2. 失敗する他のコードベースでユニットテストを実行します。
  3. 古いコードを見ずにテストに合格する新しい言語でコードを記述します。

別の方法として、ステップ1を「言語1でユニットテストを作成する」と「言語2にポートユニットテストを作成する」に分割することもできます。ポート(つまり、このコードベースでの継続的な統合のメリットは得られません)。

編集:それは注目に値する この質問 StackOverflow。

11
Bringer128

単体テストを別の言語で書くことはできないと思います。

ただし、できることは、統合/受け入れ/ユーザーインターフェイス/ whaterver_you_name_itテストを作成することです。これは、非常に高レベルであり、ソフトウェアの作成に使用されている言語とは関係ありません。

アプリケーションがWebサービスの場合、プロトコルをサポートしていれば、任意の言語でテストできます。アプリケーションがブラウザーで実行されている場合は、Seleniumを使用できます(最初に思いついたのは他にもありますが、他にもあります。たとえば、おそらくハードウェアに関係なく)機能しない場合もあります。作業しているアプリケーションのタイプ。

もちろん、(多くの時間を費やさない限り)ユニットレベルのテストと同じカバレッジはありませんが、少なくともテストハーネスはあります。

6
David

あなたのアイデアに最も近いものは、Java VMなどの仮想マシンベースのエコシステムの単体テストフレームワークだと思います。少なくともScala(そしてGroovyも信じています-Clojureについてはよくわかりません)は、Javaとほぼ完全に相互運用できます。つまり、ScalaコードはJUnitでテストでき、JavaコードはScalaTestでテストできます。このようにして、(段階的または一度に)JavaコードをScalaで書き換え、同じ古いJavaユニットテストを引き続き使用して、その正当性を確認できます。 (またはその逆-ScalaからJavaに移行する正当な理由は想像できませんが。)

おそらく同じことが.NET CLI上の言語にも当てはまります。 C#、F#、ASP.NETなど.

ただし、VM/CLRの外では、より困難です。理論的には、ユニットテストやテスト対象のコードをCなどの別の言語にコンパイルできます(これまでのC++などの新しい言語では一般的でした)が、具体的にこれを試す人は誰もいません。ユニットテスト。

2
Péter Török

方法論はさまざまですが、私の場合、TDDテストの大部分は、「単体テスト」とは対照的に「統合テスト」スタイルになる傾向があります。つまり、私のほとんどは、現実に近いクエリでプログラム全体をテストし、適切な応答をチェックしています。

いくつかのケースでは、ネットワーク主導のプログラム(主にアプリケーション固有のプロトコル)を書いたときに、仕事に簡単に感じられる完全なテストフレームワークがなかったため、ほとんどのテストを「ネットワーク全体」で行いました。簡単に言うと、私は一般的で単純なテストフレームワークを使用して別の言語で非常に単純なクライアントを作成し、ほとんどのテストでサーバーの応答をチェックしました。

それでも、そのような場合でも、実際のアプリケーションにいくつかの手動のテストを挿入して、一部の非ネットワークパーツをテストしました。

1
Javier

使用するコードの言語で記述する必要があるため、このようなフレームワークは存在しません。

たとえば、c ++コードをテストするためのフレームワークは、cまたはc ++で作成する必要があります。 c ++で記述されたフレームワークを使用することはできますが、c ++機能を使用する場合はcコードをテストしません。

1
BЈовић

言語にとらわれないテストフレームワークは、受け入れテスト(観点)に適した一般的なテストフレームワークであり、そのフレームワーク内のテストケースはQAによって管理されます(例:Robotframework)

0
rrsguru