2017-06-07 10 views
0

私はのテストを受けており、コール中にサイレントエラーが発生していないことを確認したいと思います。 残念ながらOpenGLのエラーハンドリングはあまり良くありません。 glGetError()が他のものを返すかどうかテストしたいGL_NO_ERRORTestCaseごとに1回テストすれば十分です。すべてのテストメソッドの後にアサーションを追加するとよいでしょう。python unittestを使ってテストメソッドを実行した後で追加のアサートを追加するには?

を(I 92個の方法で手動で追加する必要はありません)私はアサートをtearDownClass(cls)方法で行われ、tearDownClass任意のテスト論理を行うべきではないので許容できない溶液を示す例示的スニペットを作っ。

テスト後に追加のアサートを追加するにはどうすればよいですか?

コメントのある行には、私が達成できないことが示されます。

import struct 
import unittest 

import ModernGL 


class TestCase(unittest.TestCase): 

    @classmethod 
    def setUpClass(cls): 
     cls.ctx = ModernGL.create_standalone_context() 

    @classmethod 
    def tearDownClass(cls): 
     error = cls.ctx.error     # Store error in a variable 
     cls.ctx.release()      # Then release the context 
     cls.assertEqual(error, 'GL_NO_ERROR') # Check if there were errors before the release 

    def test_1(self): 
     ... 

    def test_2(self): 
     ... 

    def test_3(self): 
     ...    


if __name__ == '__main__': 
    unittest.main() 

注:

cls.ctx.error財産(文字列としてglGetError()で、可能な値は以下のとおりです。

"GL_NO_ERROR" 
"GL_INVALID_ENUM" 
"GL_INVALID_VALUE" 
"GL_INVALID_OPERATION" 
"GL_INVALID_FRAMEBUFFER_OPERATION" 
"GL_OUT_OF_MEMORY" 
"GL_STACK_UNDERFLOW" 
"GL_STACK_OVERFLOW" 
"GL_UNKNOWN_ERROR" 

答えて

2

あなたがテストを行うことができますtearDown(tearDownClassメソッドとは対照的に)メソッドです。通常のインスタンスメソッド:

class TestCase(unittest.TestCase): 

    def setUp(self): 
     self.ctx = ModernGL.create_standalone_context() 

    def tearDown(self): 
     error = self.ctx.error     # Store error in a variable 
     self.ctx.release()      # Then release the context 
     self.assertEqual(error, 'GL_NO_ERROR') # Check if there were errors before the release 
+0

最後に、私は静かなエラーをチェックするために 'tearDown()'を使いました。 –

関連する問題