2016-07-29 2 views
1

nosetestsとDjango Webアプリケーションでカバレッジを使用して、いくつかのコードカバレッジで小さな問題に走っています。私は大量のコード(クラス宣言のようなもの)を除外するために.coveragercファイルを作成しましたが、私はまだ奇妙な結果を得ています。ここでNosetestsとカバレッジラインを除外しない

私.coveragercファイルです:

[run] 
omit = ../*migrations*, ../*admin.py 

[report] 
show_missing = True 
exclude_lines = 
     pragma: no cover 
     from 
     = models\. 

これはmodels.pyファイルの一つの例である:私はコードカバレッジを実行すると

from django.db import models 

class Query(models.Model): 
    variable1 = models.CharField(max_length=100) 
    variable2 = models.CharField(max_length=100) 
    variable3 = models.CharField(max_length=100) 
    variable4 = models.CharField(max_length=100) 
    variable5 = models.CharField(max_length=100) 
    id = models.AutoField(primary_key=True) 

def some_function(self): 
    self.variable1 = self.variable2 + self.variable3 + self.variable4 + self.variable 5 
    return self.variable1 

だから、問題は私がに実行私がカバレージに "= models。"という文字列を明示的に除外するように指示しているにもかかわらず、コマンドラインで指定されたレポートに行がないと表示されます。これは、私がテストケースで実際にカバーしていないラインを特定することを非常に困難にしています。誰もこれにいくつかの洞察を提供することはできますか?

+0

モデル定義行を実行していないテストをどのように実行できますか?カバレッジが実行されていないと言えば、カバレッジが間違っている可能性があり、計測が遅すぎます。 「from」を除外しようとする試みは、同じ問題の別の兆候です。これらの行を除外しないでください。カバレッジを早期に実行するこの回答を参照してください:http://stackoverflow.com/a/30653523/14343 –

+0

問題を修正しました。私は他の質問へのリンクを感謝します。 –

答えて

0

私の問題の解決策を見つけました。それは、nosetestsをまったく使用する必要はないことが分かります。私は単にmanage.pyテストでcoverage.pyを実行し、テストモジュールを渡すことができます。コードカバレッジはうまく機能し、96%のカバレッジを得ました:-)

0

.coveragercファイルには、ディレクトリのルートから除外する項目がリストされます。例えば

proj |-- app1 | -- models.py -- migrations.py |-- app2

次に、あなたのcoverage.rcファイルは次のようになります。

[run] omit = app1/migrations.py, app1/admin.py

または

[run] omit = proj/*/migrations.py, proj/*/admin.py

+0

したがって、問題は省略されていません。問題は、ファイルの "exclude_lines"部分にあります。技術的に私の変数宣言(私はテストしたくない)をテストしていないので、私はコードカバレッジの割合が低くなっています。だから、 "exclude_lines"に "= models /"を追加しました。私はcoverage.pyがこれらのコード行をテストが必要なものとして認識させたくありません。私はこれを説明することを意味していることを願っていますが、それ以外にどのように言いたいのか分かりません。 –

+0

ああ、実際のモデル自体ではなく、モデルのメソッドをテストしたいのですか?私はあなたがcoveragercファイルの2つを区別できるかどうかはわかりません。モデルメソッドを別のファイルに移動し、モデルをテストしないでください。 – Alex

+0

ええ、Djangoは技術的にモデルの機能を実際のモデルに含めると言いますので、exclude_linesの正規表現のものを使ってやるのを避けることができればと願っていました。私たちは技術的にDjangoの標準に準拠することはできないと思うが、私たちがその道を辿ると、より複雑なものになっているかのように感じる。 –

関連する問題