sabirvirtuoso / Mockit

A simple mocking framework for Swift, inspired by the famous http://mockito.org/
MIT License
120 stars 27 forks source link

Mocking an subclass of ManagedObject #8

Open jyaunches opened 7 years ago

jyaunches commented 7 years ago

Is it possible? I'm just starting out and am receiving some build errors that I don't quite understand.

sabirvirtuoso commented 7 years ago

Hi there. Can you be more specific and come with a use case where you would want to mock a subclass of ManagedObject.

Nicolas-Trutet commented 5 years ago

Hello there. Coming from OCMock I am now using Mockit and I'm enjoying it. However, there is something about stubbing properties that I do not seem to understand.

I've tried to override a property and override the getter and setter as describe in the example below.

class MCKMyCustomView: MyCustomView, Mock {

    let callHandler: CallHandler

    init(testCase: XCTestCase, frame: CGRect) {
        self.callHandler = CallHandlerImpl(withTestCase: testCase)

        super.init(frame: frame)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func instanceType() -> MCKMyCustomView {
        return self
    }

    override open var infosLabel: UILabel? {
        get {
            return self.callHandler.accept(nil, ofFunction: #function, atFile: #file, inLine: #line, withArgs: nil) as? UILabel

        }
        set {
            self.callHandler.accept(nil, ofFunction: #function, atFile: #file, inLine: #line, withArgs: nil)
        }
    }
}

My attempt was to stub the property in my testing class as follow:

// Mock
let mck_view = MCKMyCustomView(testCase: self, frame: frame)

// Stub
mck_view.when().call(withReturnValue: mck_view.infosLabel).thenReturn(nil)

But stubbing this way was not always successful. I sometimes observed weird behaviours like Xcode telling me that the property has been called or not called once as if I was doing a check like a Once() or Never() on a method. I did observed property behaving as it was not stubbed.

I am wondering if the Mockit framework allows to stub properties or am I doing it the wrong way ?

Thanks for you time.

sabirvirtuoso commented 5 years ago

Thanks for contacting mate. I m a bit in a rush. Will get back to you tomorrow. Thanks.

On Thu, Oct 18, 2018 at 10:15 PM JC-Nicolas notifications@github.com wrote:

Hello there. Coming from OCMock I am now using Mockit and I'm enjoying it. However, there is something about stubbing properties that I do not seem to understand.

I've tried to override a property and override the getter and setter as describe in the example below.

class MCKMyCustomView: MyCustomView, Mock {

let callHandler: CallHandler

init(testCase: XCTestCase, frame: CGRect) {
    self.callHandler = CallHandlerImpl(withTestCase: testCase)

    super.init(frame: frame)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

func instanceType() -> MCKMyCustomView {
    return self
}

override open var infosLabel: UILabel? {
    get {
        return self.callHandler.accept(nil, ofFunction: #function, atFile: #file, inLine: #line, withArgs: nil) as? UILabel

    }
    set {
        self.callHandler.accept(nil, ofFunction: #function, atFile: #file, inLine: #line, withArgs: nil)
    }
}

}

My attempt was to stub the property in my testing class as follow:

// Mock let mck_view = MCKMyCustomView(testCase: self, frame: frame)

// Stub mck_view.when().call(withReturnValue: mck_view.infosLabel).thenReturn(nil)

But stubbing this way was not always successful. I sometimes observed weird behaviours like Xcode telling me that the property has been called or not called once as if I was doing a check like a Once() or Never() on a method. I did observed property behaving as it was not stubbed.

I am wondering if the Mockit framework allows to stub properties or am I doing it the wrong way ?

Thanks for you time.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/sabirvirtuoso/Mockit/issues/8#issuecomment-431070785, or mute the thread https://github.com/notifications/unsubscribe-auth/AKNcGHwujJ8iz2TU6Wj9iPnvH7iC8JUwks5umKkGgaJpZM4Lx51i .

-- Regards,

Syed Sabir Salman-Al-Musawi Software Engineer Dynamic Solution Innovators, http://www.dsinnovators.com/

Phone: +8801680464463 Github: https://github.com/sabirvirtuoso https://github.com/sabirvirtuoso

Nicolas-Trutet commented 5 years ago

Thanks for contacting mate. I m a bit in a rush. Will get back to you tomorrow. Thanks. On Thu, Oct 18, 2018 at 10:15 PM JC-Nicolas @.**> wrote: Hello there. Coming from OCMock I am now using Mockit and I'm enjoying it. However, there is something about stubbing properties that I do not seem to understand. I've tried to override a property and override the getter and setter as describe in the example below. class MCKMyCustomView: MyCustomView, Mock { let callHandler: CallHandler init(testCase: XCTestCase, frame: CGRect) { self.callHandler = CallHandlerImpl(withTestCase: testCase) super.init(frame: frame) } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } func instanceType() -> MCKMyCustomView { return self } override open var infosLabel: UILabel? { get { return self.callHandler.accept(nil, ofFunction: #function, atFile: #file, inLine: #line, withArgs: nil) as? UILabel } set { self.callHandler.accept(nil, ofFunction: #function, atFile: #file, inLine: #line, withArgs: nil) } } } My attempt was to stub the property in my testing class as follow: // Mock let mck_view = MCKMyCustomView(testCase: self, frame: frame) // Stub mck_view.when().call(withReturnValue: mck_view.infosLabel).thenReturn(nil) But stubbing this way was not always successful. I sometimes observed weird behaviours like Xcode telling me that the property has been called or not called once as if I was doing a check like a Once() or Never() on a method. I did observed property behaving as it was not stubbed. I am wondering if the Mockit framework allows to stub properties or am I doing it the wrong way ? Thanks for you time. — You are receiving this because you commented. Reply to this email directly, view it on GitHub <#8 (comment)>, or mute the thread https://github.com/notifications/unsubscribe-auth/AKNcGHwujJ8iz2TU6Wj9iPnvH7iC8JUwks5umKkGgaJpZM4Lx51i . -- Regards, Syed Sabir Salman-Al-Musawi Software Engineer Dynamic Solution Innovators, http://www.dsinnovators.com/ Phone: +8801680464463 Github: https://github.com/sabirvirtuoso https://github.com/sabirvirtuoso*

Hello sabirvirtuoso, did you find the time to look at the issue ? Have a nice day.

sabirvirtuoso commented 5 years ago

Hi,

stubbing properties, more specifically getters and setter seems to be out of scope of the current implementation. Please feel free to add this feature and send me a PR.

Thanks