10/10/2018, 09:27

nhà tuyển dụng gửi cho test case các bác help ?

PHP Code:
<?php
/**
* Interviewer: please create test cases for the following class 
* @version 01192009
*/
class CMathSimpleMovingAverage {
    private 
$mDatas// single array of data points (value over time: x1,x2,x3, etc.)

    /**
    * Set up the input data
    * @param array data
    * @return void
    */
    
public function __construct($pDatas) {
        
$this->mDatas $pDatas;
    }
    
    
/**
    * Just a really simple addition, only for the purpose of testing, nothing related to moving avg
    * @param float number
    * @param float number
    * @return float total
    */
    
public function sum($pOne,$pTwo) {
        return 
$pOne+$pTwo;
    }

    
/**
     * Compute the forecasted value
     * @param int    number of periods to use in the moving average
     * @return float
    */
    
public function predict($pNumPastValues) {
        
$vSum 0;
        for (
$i=1;$i<=$pNumPastValues;$i++) {
            
$vSum += $this->mDatas***91;count($this->mDatas)-$i***93;;
        } 
// rof
        
$vFuture $vSum/$pNumPastValues// avg the intervals
        
$this->mDatas***91;***93; = $vFuture// add this latest value into the values, might need for additional prediction
        
return $vFuture;
    }
    
    
/**
     * Display the output of a standard prediction
     * @param int            number of periods to use in the moving average
     * @param string        type of output
     * @throws Exception    invalid output type
     * @return string
    */
    
public function displayStandardPrediction($pNumPastValues=4,$pOutputType='raw') {
        
$vValue $this->predict($pNumPastValues);
        switch (
$pOutputType) {
            case 
'raw': return $vValue;
            case 
'formatted': return number_format($vValue);
            default: throw 
Exception('Unknown Output Type');
        } 
// esac
        
    
}
}

/**
* An example test case, there should be at least 5 more cases to test
*/
class CMathSimpleMovingAverageTest extends UnitTestCase {
    function 
test_sum() {
        
$vMovingAvg = new CMathSimpleMovingAverage(array(1,2,3));
        
$this->assertEqual($vMovingAvg->sum(1,1),2); // 1+1 must equal 2
    
}
    
    
/*
    ...
    Write your own test cases here
    ...
    */
}


?>
họ kêu mình viết các trường hợp test case. vậy ở đây mình viết các trường hợp nào vào chỗ:
PHP Code:
/*
...
Write your own test cases here
...
*/ 
sao họ lại kế thừa "extends UnitTestCase

"
UnitTestCase lớp đó họ lấy ở đâu ra, hay bây giờ mình phải viết
c.ty test kỹ quá, các bác giúp em với nha ?
snoob viết 11:40 ngày 10/10/2018
Thế bác tự nghĩ vậy
pcdinh viết 11:33 ngày 10/10/2018
Không hiểu sao cứ nhìn thấy đoạn code nào dùng Hungarian Notation là tớ ko ưa nổi. Tại sao cứ phải prefix các biến với các kí tự rất vô nghĩa lý và chỉ thể hiện leaky abstraction? Tuy nhiên không ưa hơn là các bác viết code cứ díu dìu vào nhau, không thèm có khoảng cách giữa dấu phảy tách các tham số.

Test case là một thuật ngữ rất không nên dùng trong trường hợp này. Người yêu cầu thực ra muốn kiểm tra sự hiểu biết về viết unit test mà thôi.

Bạn không cần implement UnitTestCase vì đó là thư viện hỗ trợ unit test của nhà tuyển dụng. Nếu không nhầm thì nó là SimpleTest.

Theo như tôi nghĩ thì họ yêu cầu viết đơn giản: không cần quan tâm đến fixture, chẳng teardown. Trên thực tế là test thủ tục.

Code:
/**
* An example test case, there should be at least 5 more cases to test
*/
class CMathSimpleMovingAverageTest extends UnitTestCase {
    function test_sum() {
        $vMovingAvg = new CMathSimpleMovingAverage(array(1,2,3));
        $this->assertEqual($vMovingAvg->sum(1,1),2); // 1+1 must equal 2
    }
    
    function test_sum2() {
        $ma = new CMathSimpleMovingAverage(array());
        $this->assertEqual($ma->sum(1, -1), 0);
    }

    function test_sum3() {
        $ma = new CMathSimpleMovingAverage(''); // Error prone ;))
        $this->assertEqual($ma->sum(1000.9, 999.6), 2000.5);
    }

    function test_predict1() {
        // Phương thức predict viết có lỗi. Test tạm vậy
        $seed = array(2, 5, 6, 7, 8);
        $ma = new CMathSimpleMovingAverage($seed);
        $this->assertEqual($ma->predict(2), 7.5);
    }

    function test_displayStandardPrediction() {
        // Phương thức predict viết có lỗi. Test tạm vậy
        $seed = array(2, 5, 6, 7, 8);
        $ma = new CMathSimpleMovingAverage($seed);
        try 
        {
            $ma->displayStandardPrediction(2, 'unknown');
            $this->assertEqual('Exception should be thrown', 'Exception is not thrown actually');
        } 
        catch (Exception $ex)
        {
            $this->assertEqual('Exception', get_class($ex));
        }        
    }
}
Đại khái thế.
Nhân Tâm viết 11:43 ngày 10/10/2018
Thank bác Định nhiều để Em thử, hôm nọ họ đã gửi Em cho một php class có 2 function & 1 constructor kêu debug, Em chạy thử trên sever window local & suse Server, kiểm tra bằng tay thấy chẳng có lỗi gì, họ kêu rớt đài .

Hôm nay họ gửi cái unit test là cơ hội cuối cho nhà Em nên phải lên đây tham khảo ý kiến các bác.
pcdinh viết 11:39 ngày 10/10/2018
Rõ ràng là ko thể debug chỉ bằng cách chạy thuần túy.

Cái class mà họ gửi bạn để test có một đống vấn đề kèm theo. Tại sao không gửi unit test files kèm theo các phê bình về code nhỉ?

Ví dụ: $pNumPastValues mà lớn hơn số phần tử của $mDatas thì sao? Làm sao Unit test chạy được vì thư viện còn chẳng bắt lỗi đó. Hay như nếu $mDatas ko phải là array hay $pNumPastValues là null.
Bài liên quan
0