Dannnno / PyGrader

Repository demonstrating how python can be used to auto-grade homework assignments. Does not contain any specific assignments or their tests, but does contain the basic building blocks used.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

PyGrader

Repository demonstrating how python can be used to auto-grade homework assignments. Does not contain any specific assignments or their tests, but does contain the basic building blocks used. Basic functionality is complete, advanced funcitonality is planned

Planned functionality:

Will implement a sandbox
Will implement a parser to fix submissions that don't use if __name__ == "__main__":

===

How to use:

auto_grader.auto_grader is the base auto_grader class. It has all of the built in functionality to run the majority of desired tests. It is a subclass of unittest.TestCase so normal unit testing methods (such as self.assertEqual()) will work in this class.

Grader is asked to subclass this with their own desired functionality. If capturing printed statements is desired then just use the context manager autograder.capture() like so

    def test_my_func(self):
        my_func = my_subclass.black_magic(func_name)
        
        with self.capture() as (out, err):
            map(self.assertEqual,
                map(my_func,
                    arglist),
                out)

If this doesn't do exactly you want then just override capture with the desired functionality. When implementing your test functions you can just do

    def test_some_func(self, args):
        some_func = my_subclass.black_magic(func_name)
        map(self.assertEqual,
            map(some_func,
                arglist),
            expected_value_list)

To actually run your tests just call

    test_assignment(subclass, good_names, student_name,
                    module_name, mod_path, grade_path)

With all of the appropriate arguments. Loops are ideal. For example:

    for submission in submissions:
        test_assignment(subclass, my_names, submission[0],
                        submission[1], submission[2], submission[3])

Where submission has all of the data you need and submissions contains every piece of data

About

Repository demonstrating how python can be used to auto-grade homework assignments. Does not contain any specific assignments or their tests, but does contain the basic building blocks used.

License:MIT License


Languages

Language:Python 100.0%