例如,这个类:
export class List<T> {
private _count: number;
private _items: Array<T>;
constructor() {
this._count = 0;
this._items = [];
}
get(index: number) {
return this._items[index];
}
add(item: T) {
this._items[this._count] = item;
this._count++;
}
}
茉莉花中的单元测试:
import { List } from './list';
describe( 'List', () => {
let testList: List<string>;
beforeEach(() => {
testList = new List<string>();
} );
it( 'get() method works', () => {
//how to test get() method without calling add() method?
testList.add( "string1" );
testList.add( "string2" );
testList.add( "string3" );
let s1: string = testList.get( 0 );
let s2: string = testList.get( 1 );
let s3: string = testList.get( 2 );
expect( s1 ).toBe( "string1" );
expect( s2 ).toBe( "string2" );
expect( s3 ).toBe( "string3" );
} );
}
我认为,这不是单元测试,而是集成测试,那么如何编写正确的单元测试?我看看模拟,但我不知道,在这种情况下如何使用它。
答案 0 :(得分:1)
作为第一个选项,您可以在测试 get 方法之前修复状态,即在添加项目之前添加检查列表是否为空。作为第二个选项,您可以尝试添加带有初始项的构造函数,以及对包含项的空构造函数和构造函数的测试。然后,您可以在不调用 add 方法的情况下重做测试。
但我认为它并不那么重要,因为无论如何,你会称其他方法。单元测试表明与HTTP,数据库等其他组件隔离。