@IsTest
private class JWTTest {

    @IsTest
    static void test_sign_jwt() {

        // grabbed a fake key from
        // http://phpseclib.sourceforge.net/rsa/2.0/examples.html
        String mockPrivateKey = String.join(new String[] {
            'MIICXAIBAAKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUp',
            'wmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5',
            '1s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQABAoGAFijko56+qGyN8M0RVyaRAXz++xTqHBLh',
            '3tx4VgMtrQ+WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2',
            'pIIVOFMDG+KESnAFV7l2c+cnzRMW0+b6f8mR1CJzZuxVLL6Q02fvLi55/mbSYxECQQDeAw6fiIQX',
            'GukBI4eMZZt4nscy2o12KyYner3VpoeE+Np2q+Z3pvAMd/aNzQ/W9WaI+NRfcxUJrmfPwIGm63il',
            'AkEAxCL5HQb2bQr4ByorcMWm/hEP2MZzROV73yF41hPsRC9m66KrheO9HPTJuo3/9s5p+sqGxOlF',
            'L0NDt4SkosjgGwJAFklyR1uZ/wPJjj611cdBcztlPdqoxssQGnh85BzCj/u3WqBpE2vjvyyvyI5k',
            'X6zk7S0ljKtt2jny2+00VsBerQJBAJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2epl',
            'U9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhMCQBGoiuSoSjafUhV7i1cEGpb88h5NBYZzWXGZ',
            '37sJ5QsW+sJyoNde3xH8vdXhzU7eT82D6X/scw9RZz+/6rCJ4p0='
        }, '');

        Test.startTest();

        JWT.IAlgorithm alg = new JWT.RSA256Algorithm(
            mockPrivateKey
        );

        Auth.JWT jwtClaims = new Auth.JWT();
        jwtClaims.setValidityLength(5 * 60); // seconds
        jwtClaims.setAud('your audience claim here');
        jwtClaims.setAdditionalClaims(new Map<String, Object>{
            'some_key' => 'some value'
        });

        JWT j = new JWT(alg, jwtClaims);
        
        String token = j.sign();
        System.debug(token);

        Test.stopTest();

        System.assertNotEquals(null, token);

    }
    
}