如何在不调用其他方法的情况下在茉莉和测试方法中编写单元测试?

时间:2017-09-21 10:43:00

标签: unit-testing typescript jasmine

例如,这个类:

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" );
    } );
}
我认为,这不是单元测试,而是集成测试,那么如何编写正确的单元测试?我看看模拟,但我不知道,在这种情况下如何使用它。

1 个答案:

答案 0 :(得分:1)

作为第一个选项,您可以在测试 get 方法之前修复状态,即在添加项目之前添加检查列表是否为空。作为第二个选项,您可以尝试添加带有初始项的构造函数,以及对包含项的空构造函数和构造函数的测试。然后,您可以在不调用 add 方法的情况下重做测试。

但我认为它并不那么重要,因为无论如何,你会称其他方法。单元测试表明与HTTP,数据库等其他组件隔离。