言語に依存しないユニットテストフレームワークはありますか?[閉まっている]


11

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

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

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

別の方法として、ステップ1を「言語1でユニットテストを書く」と「言語2にユニットテストを移植する」に分割します。これにより、必要な労力が大幅に増加し、ポート(つまり、このコードベースでの継続的な統合の利点は得られません)。

編集:StackOverflowでこの質問に注目する価値があります。


純粋なテキストコマンドプロトコルを提供し、それを使用expectしてテストを実装します。
SKロジック

@ SK-logic聞いたことがないexpect。stdinとstdoutを使用してパイプと通信するUnixスタイルのレガシーシステムがある場合は、そのツールを確実に使用できます。実際、どのスクリプト言語でも簡単にテストできます。
Bringer128

なぜレガシーなのか?UNIXスタイルの最新システムも使用できます。とにかく、機能の一部にスクリプトインターフェイスを提供しない正当な理由はありません。
SKロジック

@ SK-logicはっきりしないでごめんなさい。移植は通常からに行われるため、「レガシー」と言いlegacy language xましたfancy new language y。私はUnixについて何も暗示しようとしていませんでした!
Bringer128

ちなみに、@ Bringer123は、まともなUnixサポートなしで(たとえば適切なパイプなしで)このようなUnixライクな統合を行うための私の小さなトリックは、スクリプト言語を埋め込み、TCPポート経由でREPLへのアクセスを提供することです別のスレッドで実行されているREPL)。強力なデバッグツールであり、自動化エンジンをテストします。そして、このアプローチは文字通りすべてで機能します(組み込みスクリプト言語は非常に小さい場合があり、限られたリソースのシナリオではForthになる場合もあります)。
SKロジック

回答:


6

別の言語で単体テストを書くことは不可能だと思います。

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

アプリケーションがWebサービスである場合、プロトコルをサポートしていれば、任意の言語でテストできます。アプリケーションをブラウザで実行する場合、セレンを使用できます(これが私の頭に浮かんだのは初めてですが、他にもあります。など)作業しているアプリケーションのタイプ。

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


自動化された高レベルのテストの場合は+1。これらは間違いなく制作する価値があります。
Bringer128

1
「ユニットテストを別の言語で書くことは不可能だと思います。」:カウンターの例:.NETでは、Visual Basic(または他の.NET対応言語)でC#の単体テストを作成できます。数年前、これはMicrosoftによってベストプラクティスとして推進されました。これは、コードに関連する同じ誤り(および特にプログラマの相対的な誤解)をコードでテストするリスクを下げるためです。同意して、PHPコードをテストするためにFortranで単体テストを書くことはありません。
Arseni Mourzenko

2

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

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

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


1
これは私の質問の問題を示していると思います。簡単に相互運用できる場合、なぜ移植するのですか?そして、それができない場合、言語の障壁により、言語間のユニットテストを行うことができなくなります。
Bringer128

JVMの新種の支持者である@ Bringer128は、特定の問題をJavaよりも大幅に少ないクリーンなコードで迅速に解決できると主張しています。これまでのところ、Scalaでの限られた経験からこれが確認されています。
ペテルトレック

Groovyは同様にJavaと相互運用します。
user281377 14年

1

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

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


1

方法論はさまざまですが、私の場合、TDDテストの大部分は「単体テスト」ではなく「統合テスト」スタイルになります。つまり、それらのほとんどは、ほぼ実際のクエリでプログラム全体をテストし、適切な応答をチェックします。

いくつかのケースでは、ネットワーク駆動型プログラム(主にアプリケーション固有のプロトコル)を作成したときに、仕事に使いやすいと感じる便利な完全なテストフレームワークがなかったため、簡単に言えば、共通のシンプルなテストフレームワークを使用して別の言語で非常にシンプルなクライアントを作成し、ほとんどのテストでサーバーの応答をチェックしました。

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


0

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


2
これは作られたポイントを超える大幅な提供の何にも思えるし、前4つの答えで説明していません
ブヨ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.