     }
     
     //MARK: - reset
+    
+    /// Resets call history and removes existing stub.
+    /// It is a rare case when you want to reset a mock because it's likely to be disposed and recreated at **tearDown()** and **setUp()** phases. Nevertheless, their could be a reason to do it - looping through several variants of data, etc.
     public func reset() {
         callHistory.removeAll()
         stub = nil

    }

    //MARK: - stub
    public func whenCalled() -> Stub<TArgs, TReturn> {
        if let stub = stub {
            return stub

    }

    //MARK: - verify
    
    /// Checks whether function call times count is approriate according to the rule.
    ///
    /// - Parameter rule: A rule to be verified.
    /// - Returns: True if everything is ok. This return value is unnecessery but without it
    /// - Throws: CallTimesRuleIsBroken error if the rule was broken
    @discardableResult
    public func verify(called rule: CallTimesRule) throws -> Bool {
        try rule.verify(callTimesCount())
        return true
    }
    
    fileprivate func callTimesCount() -> Int {
        return callHistory.count
    }
    
    //MARK: - args
    
    /// Gets args of last call
    ///
    /// - Returns: Args of last call
    public func args() -> TArgs? {
        return args(callTime: callTimesCount() - 1)
    }
    
    /// Gets args of given callTime
    ///
    /// - Parameter callTime: An index of call
    /// - Returns: Args of call. Will return **nil** if function was called less times then *callTime*.
    public func args(callTime: Int) -> TArgs? {
        guard callTime > -1,
            callTime < callTimesCount() else { return nil }
