単体テストを実行するときは、テストにハードコーディングが必要なリテラル結果をテストする方が良いですか(expect(x).toBe(mockedData.value)
)ジャスミンユニットテスト:ロジックまたは実際の模擬データをテストすべきですか?
私が期待しているリテラル結果を実際にテストしていると確信しているので、最初のアプローチは安全だと思われますが、2番目のアプローチはモックデータを心配するのではなくロジックをテストできるのでテスト自体を書き換えることなく後で変更することもできます)
いずれのアプローチの利点/欠点は何ですか?これらの場合のベストプラクティスは何ですか?続き
は簡単な例です:
// MockedData is a very long array of complex objects
// each of them has a property 'value' of type number
import mockedData from 'data.mock';
class ClassToTest {
private data;
constructor(data) {
this.data = data;
}
plusOne(): number {
return this.data.value + 1;
}
}
describe('test',() => {
let instance: ClassToTest;
beforeEach(() => {
instance = new ClassToTest(mockedData[0]);
})
it('plusOne() should return the property "value" plus one',() => {
// Should I write this...
expect(instance.plusOne()).toBe(mockedData[0] + 1);
// ...or this?
expect(instance.plusOne()).toBe(17); // Because I know that mockedData[0].value is 16
})
});
はどうもありがとうございました!! :)
これは大きな問題です。残念ながら、正しい答えがないので、SOにはあまり適していません。いずれにしてもそれを行うための議論があります。この場合、メソッドはplusOneです。アサーションが 'something + 1'であることがわかります。しかし、あまり作成されていないケースでは、モックデータが変更されたときにテストをより壊れやすくしても、ハードコーディングされた数値を使用するときに何がテストされているのかを理解する方がしばしば簡単になります。 –
TBH ** input 17 = ouput 17 * *これはテストではありません**入力してtrue =出力17 ** **それではテストです 正しい入力をしてもサービスが常に期待される結果を出さなければならないため、コンポーネントをテストしてみてください。あなたのバックエンドの処理が間違っています – Swoox
'mockedData'を使っているIMOは、このテストケースをもっと分かりやすくしています:* 16.plusOneは17を返すべきです* description – MinusFour