     private let versionDAO: VersionDAOProtocol
     
     private typealias TestName = String
-    private var tests = [TestName: [Version]]()
     private var selectedVersions: [TestName: Version]
     
     // MARK: - Init

        }
        
        let testName = extractTestName(firstVersion)
        
        for version in versions {
            registerVersion(version: version.rawValue, testName: testName)
        }

        if selectedVersions[testName] == nil {
            try raffleVersion(testName: testName)
            
            guard let selectedVersions = selectedVersions[testName] else {
                throw GollumError.SelectedVersionNotFound("Test \(testName) should have a selected version.")

        return mirror.subjectName
    }
    
    private func raffleVersion<T: RawRepresentable where T.RawValue == Version>(versions: [T], testName: String) throws {
        let versionsRawValue = convertToArrayOfRawValue(versions)
        
        guard isTestProbabilitySumValid(versionsRawValue) else {
            throw GollumError.ProbabilitySumIncorrect("Sum of \(testName)'s probability isn't 1.0")
        }

        var selectedNumber = generateAleatoryNumber()
        let probabilities = versionsRawValue.map { Int($0.probability * 1000) }
        for (index, probability) in probabilities.enumerate() {
            if selectedNumber <= probability {
                selectedVersions[testName] = versionsRawValue[index]
                return
            }
            
