私は常に作業コードの書き換えに懐疑的でした。コードの移植はこれに例外ではありません。ただし、TDDと自動テストの登場により、コードを書き直してリファクタリングする方がはるかに合理的です。
古いコードの移植に使用できるTDDツールがあるかどうか誰かが知っていますか?理想的には、次のことを実行できます。
別の方法として、ステップ1を「言語1でユニットテストを作成する」と「言語2にポートユニットテストを作成する」に分割することもできます。ポート(つまり、このコードベースでの継続的な統合のメリットは得られません)。
編集:それは注目に値する この質問 StackOverflow。
単体テストを別の言語で書くことはできないと思います。
ただし、できることは、統合/受け入れ/ユーザーインターフェイス/ whaterver_you_name_itテストを作成することです。これは、非常に高レベルであり、ソフトウェアの作成に使用されている言語とは関係ありません。
アプリケーションがWebサービスの場合、プロトコルをサポートしていれば、任意の言語でテストできます。アプリケーションがブラウザーで実行されている場合は、Seleniumを使用できます(最初に思いついたのは他にもありますが、他にもあります。たとえば、おそらくハードウェアに関係なく)機能しない場合もあります。作業しているアプリケーションのタイプ。
もちろん、(多くの時間を費やさない限り)ユニットレベルのテストと同じカバレッジはありませんが、少なくともテストハーネスはあります。
あなたのアイデアに最も近いものは、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++などの新しい言語では一般的でした)が、具体的にこれを試す人は誰もいません。ユニットテスト。
方法論はさまざまですが、私の場合、TDDテストの大部分は、「単体テスト」とは対照的に「統合テスト」スタイルになる傾向があります。つまり、私のほとんどは、現実に近いクエリでプログラム全体をテストし、適切な応答をチェックしています。
いくつかのケースでは、ネットワーク主導のプログラム(主にアプリケーション固有のプロトコル)を書いたときに、仕事に簡単に感じられる完全なテストフレームワークがなかったため、ほとんどのテストを「ネットワーク全体」で行いました。簡単に言うと、私は一般的で単純なテストフレームワークを使用して別の言語で非常に単純なクライアントを作成し、ほとんどのテストでサーバーの応答をチェックしました。
それでも、そのような場合でも、実際のアプリケーションにいくつかの手動のテストを挿入して、一部の非ネットワークパーツをテストしました。
使用するコードの言語で記述する必要があるため、このようなフレームワークは存在しません。
たとえば、c ++コードをテストするためのフレームワークは、cまたはc ++で作成する必要があります。 c ++で記述されたフレームワークを使用することはできますが、c ++機能を使用する場合はcコードをテストしません。
言語にとらわれないテストフレームワークは、受け入れテスト(観点)に適した一般的なテストフレームワークであり、そのフレームワーク内のテストケースはQAによって管理されます(例:Robotframework)