         self.isPartial = isPartial
     }
     
+    /// Registers func call and gets the result
+    ///
+    /// - Parameter args: Call arguments
+    /// - Returns: Stubbed result (if stub is present) or a default result (a result of real func for partical mock)
     @discardableResult
     public func handle(_ args: TArgs) -> TReturn {
         callHistory.append(args)


import Foundation

public class FuncCallHandler<TArgs, TReturn> {
    
    fileprivate var callHistory: [TArgs] = []
    fileprivate let returnValue: TReturn
    
    fileprivate var stub: Stub<TArgs, TReturn>?
    let callRealFunc: ((_ args: TArgs) -> TReturn)?
    
    let isPartial: Bool
    
    public init(returnValue: TReturn,
                isPartial: Bool = false,
                callRealFunc: ((_ args: TArgs) -> TReturn)? = nil) {

    }
    
    //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
