2012-06-25 22 views
8

Mũi có bug - tên thử được tạo bởi máy phát không được lưu vào bộ nhớ cache, vì vậy lỗi có vẻ như đã xảy ra trong lần thử nghiệm cuối cùng. Tôi nhận được xung quanh nó sau solution trong các cuộc thảo luận báo cáo lỗi, nhưng nó chỉ hoạt động cho tên hiển thị trên thiết bị xuất chuẩn, không phải trong báo cáo XML (--with-xUnit)Thay đổi tên của các thử nghiệm được tạo bởi máy phát thử mũi

from functools import partial, update_wrapper 
def testGenerator(): 
    for i in range(10): 
     func = partial(test) 
     # make decorator with_setup() work again 
     update_wrapper(func, test) 
     func.description = "nice test name %s" % i 
     yield func 

def test(): 
    pass 

Kết quả của mũi được như mong đợi, giống như

nice test name 0 ... ok 
nice test name 1 ... ok 
nice test name 2 ... ok 
... 

Nhưng tên thử nghiệm trong XML chỉ là 'testGenerator'.

...<testcase classname="example" name="testGenerator" time="0.000" />... 

Làm thế nào tôi có thể thay đổi điều này để các tên thử nghiệm cá nhân được hiển thị trên cả stdout và XML đầu ra?

Tôi đang sử dụng phiên bản 1.1.2 nosetests và Python 2.6.6

+0

Thay đổi 'func .__ name__' hoặc 'func .__ doc__' không hoạt động. –

+0

Làm cách nào để tạo bộ thử nghiệm thay thế? – Apalala

+1

@Apalala cảm ơn, có vẻ như nó có thể giải quyết nó. Mặc dù tôi không thể tìm thấy bất kỳ thông tin về cách sử dụng này trong mũi và làm thế nào nó trộn với khám phá thử nghiệm của mũi. Bạn có thể cho một ví dụ xin vui lòng? –

Trả lời

4

Bạn có thể thay đổi cách mà tên Mũi kiểm tra bởi adding a plugin mà thực hiện describeTest

from nose.plugins import Plugin 
class CustomName(Plugin): 
    "Change the printed description/name of the test." 
    def describeTest(self, test): 
     return "%s:%s" % (test.test.__module__, test.test.description) 

Sau đó bạn sẽ phải install this plugin và kích hoạt nó trong lời gọi Nose.

1

Bạn có thể thêm dòng sau đây.

testGenerator.__name__ = "nice test name %s" % i

Ví dụ:

from functools import partial, update_wrapper 
def testGenerator(): 
    for i in range(10): 
     func = partial(test) 
     # make decorator with_setup() work again 
     update_wrapper(func, test) 
     func.description = "nice test name %s" % i 
     testGenerator.__name__ = "nice test name %s" % i 
     yield func 

def test(): 
    pass 

này sẽ dẫn đến những cái tên mà bạn muốn.

<testsuite name="nosetests" tests="11" errors="0" failures="0" skip="0"><testcase classname="sample" name="nice test name 0" time="0.000" /> 
+0

Điều này gần như hoạt động, ngoại trừ tất cả các bài kiểm tra có cùng tên cho tôi (mũi 1.2.1, trăn 2.7.3) – Rog

1

Như Ananth đề cập, bạn có thể sử dụng điều này.

testGenerator.__name__ 

Bạn cũng có thể sử dụng thay vì

testGenerator.compat_func_name 

Nếu lớp thử nghiệm của bạn có lý lẽ, tôi khuyên bạn nên tách lạng bộ chúng, cũng như tách lạng bộ with_setup. Sử dụng lambda tiết kiệm trên nhập khẩu, và tôi nghĩ rằng đó là một chút sạch hơn. Ví dụ,

from nose.tools import with_setup 

def testGenerator(): 
    for i in range(10): 
     func = with_setup(set_up, tear_down)(lambda: test(i)) 

     func.description = "nice test name %s" % i 
     testGenerator.compat_func_name = func.description 

     yield func 

def test(i): 
    pass 

def set_up(): 
    pass 

def tear_down(): 
    pass 
+0

Cuộc gọi tốt trên máy xay –

0

Nếu sử dụng mũi và PyUnit Eclipe của:

import nose 

class Test(object): 
    CURRENT_TEST_NAME = None 

    def test_generator(self): 
     def the_test(*args,**kwargs): 
      pass 

     for i in range(10): 
      # Set test name 
      Test.CURRENT_TEST_NAME = "TestGenerated_%i"%i 
      the_test.description = Test.CURRENT_TEST_NAME 

      # Yield generated test 
      yield the_test,i 

    # Set the name of each test generated 
    test_generator.address = lambda arg=None:(__file__, Test, Test.CURRENT_TEST_NAME) 

đó sẽ gây ra cái tên xuất hiện độc đáo trong PyUnit là tốt.

Generated test names

Các vấn đề liên quan