Mockery: how to use shouldReceive with method_exists?
In my application code, I've got a method_exists check to authorize some hooking in a create process:
// Note: $myClass is implementing a ListItemFactory interface.
if ($isCreate) {
$methodName = "create{$attr}ListItem";
if (method_exists($myClass, $methodName)) {
$item = $myClass->$methodName();
} else {
[...]
}
}
I'm trying to test this code, mocking $myClass and checking if $methodName is in fact called. Here's how I wrote the test:
/** @test */
function specific_create_method_is_called()
{
$factory = Mockery::mock(ListItemFactory::class)->makePartial();
$factory->shouldReceive("createCommentsListItem")->once();
[...]
}
But this isn't working, because method_exists is not defined in the mock. I'm fairly new to mock stuff, so maybe there's an obvious way to manage this problem, like "stubbing" the wanted function, but I wasn't able to find the way...
Thanks in advance for any help.
php unit-testing testing mockery
add a comment |
In my application code, I've got a method_exists check to authorize some hooking in a create process:
// Note: $myClass is implementing a ListItemFactory interface.
if ($isCreate) {
$methodName = "create{$attr}ListItem";
if (method_exists($myClass, $methodName)) {
$item = $myClass->$methodName();
} else {
[...]
}
}
I'm trying to test this code, mocking $myClass and checking if $methodName is in fact called. Here's how I wrote the test:
/** @test */
function specific_create_method_is_called()
{
$factory = Mockery::mock(ListItemFactory::class)->makePartial();
$factory->shouldReceive("createCommentsListItem")->once();
[...]
}
But this isn't working, because method_exists is not defined in the mock. I'm fairly new to mock stuff, so maybe there's an obvious way to manage this problem, like "stubbing" the wanted function, but I wasn't able to find the way...
Thanks in advance for any help.
php unit-testing testing mockery
The ListItemFactory source would be great to see.
– l-x
Nov 30 '15 at 14:38
was just solving very similar stuff, check out stackoverflow.com/questions/37927273/… this might help you
– user3350906
Jun 20 '16 at 17:41
This is what helped me: stackoverflow.com/a/46922330/470749
– Ryan
Feb 23 at 19:13
add a comment |
In my application code, I've got a method_exists check to authorize some hooking in a create process:
// Note: $myClass is implementing a ListItemFactory interface.
if ($isCreate) {
$methodName = "create{$attr}ListItem";
if (method_exists($myClass, $methodName)) {
$item = $myClass->$methodName();
} else {
[...]
}
}
I'm trying to test this code, mocking $myClass and checking if $methodName is in fact called. Here's how I wrote the test:
/** @test */
function specific_create_method_is_called()
{
$factory = Mockery::mock(ListItemFactory::class)->makePartial();
$factory->shouldReceive("createCommentsListItem")->once();
[...]
}
But this isn't working, because method_exists is not defined in the mock. I'm fairly new to mock stuff, so maybe there's an obvious way to manage this problem, like "stubbing" the wanted function, but I wasn't able to find the way...
Thanks in advance for any help.
php unit-testing testing mockery
In my application code, I've got a method_exists check to authorize some hooking in a create process:
// Note: $myClass is implementing a ListItemFactory interface.
if ($isCreate) {
$methodName = "create{$attr}ListItem";
if (method_exists($myClass, $methodName)) {
$item = $myClass->$methodName();
} else {
[...]
}
}
I'm trying to test this code, mocking $myClass and checking if $methodName is in fact called. Here's how I wrote the test:
/** @test */
function specific_create_method_is_called()
{
$factory = Mockery::mock(ListItemFactory::class)->makePartial();
$factory->shouldReceive("createCommentsListItem")->once();
[...]
}
But this isn't working, because method_exists is not defined in the mock. I'm fairly new to mock stuff, so maybe there's an obvious way to manage this problem, like "stubbing" the wanted function, but I wasn't able to find the way...
Thanks in advance for any help.
php unit-testing testing mockery
php unit-testing testing mockery
asked Nov 22 '15 at 15:03
PhilippePhilippe
488516
488516
The ListItemFactory source would be great to see.
– l-x
Nov 30 '15 at 14:38
was just solving very similar stuff, check out stackoverflow.com/questions/37927273/… this might help you
– user3350906
Jun 20 '16 at 17:41
This is what helped me: stackoverflow.com/a/46922330/470749
– Ryan
Feb 23 at 19:13
add a comment |
The ListItemFactory source would be great to see.
– l-x
Nov 30 '15 at 14:38
was just solving very similar stuff, check out stackoverflow.com/questions/37927273/… this might help you
– user3350906
Jun 20 '16 at 17:41
This is what helped me: stackoverflow.com/a/46922330/470749
– Ryan
Feb 23 at 19:13
The ListItemFactory source would be great to see.
– l-x
Nov 30 '15 at 14:38
The ListItemFactory source would be great to see.
– l-x
Nov 30 '15 at 14:38
was just solving very similar stuff, check out stackoverflow.com/questions/37927273/… this might help you
– user3350906
Jun 20 '16 at 17:41
was just solving very similar stuff, check out stackoverflow.com/questions/37927273/… this might help you
– user3350906
Jun 20 '16 at 17:41
This is what helped me: stackoverflow.com/a/46922330/470749
– Ryan
Feb 23 at 19:13
This is what helped me: stackoverflow.com/a/46922330/470749
– Ryan
Feb 23 at 19:13
add a comment |
1 Answer
1
active
oldest
votes
Create a small testing class and mock it partially.
Define in the scope of your test class:
class MyClass implements ListItemFactory {
public function createCommentsListItem() { }
}
Then, in your test function:
/** @test */
function specific_create_method_is_called()
{
$myClass = m::mock(MyClass::class)->makePartial();
$myClass->shouldReceive('createCommentsListItem')->once();
// method_exists($myClass, 'createCommentsListItem')
// returns true now
}
(in this example: use Mockery as m;)
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f33856225%2fmockery-how-to-use-shouldreceive-with-method-exists%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Create a small testing class and mock it partially.
Define in the scope of your test class:
class MyClass implements ListItemFactory {
public function createCommentsListItem() { }
}
Then, in your test function:
/** @test */
function specific_create_method_is_called()
{
$myClass = m::mock(MyClass::class)->makePartial();
$myClass->shouldReceive('createCommentsListItem')->once();
// method_exists($myClass, 'createCommentsListItem')
// returns true now
}
(in this example: use Mockery as m;)
add a comment |
Create a small testing class and mock it partially.
Define in the scope of your test class:
class MyClass implements ListItemFactory {
public function createCommentsListItem() { }
}
Then, in your test function:
/** @test */
function specific_create_method_is_called()
{
$myClass = m::mock(MyClass::class)->makePartial();
$myClass->shouldReceive('createCommentsListItem')->once();
// method_exists($myClass, 'createCommentsListItem')
// returns true now
}
(in this example: use Mockery as m;)
add a comment |
Create a small testing class and mock it partially.
Define in the scope of your test class:
class MyClass implements ListItemFactory {
public function createCommentsListItem() { }
}
Then, in your test function:
/** @test */
function specific_create_method_is_called()
{
$myClass = m::mock(MyClass::class)->makePartial();
$myClass->shouldReceive('createCommentsListItem')->once();
// method_exists($myClass, 'createCommentsListItem')
// returns true now
}
(in this example: use Mockery as m;)
Create a small testing class and mock it partially.
Define in the scope of your test class:
class MyClass implements ListItemFactory {
public function createCommentsListItem() { }
}
Then, in your test function:
/** @test */
function specific_create_method_is_called()
{
$myClass = m::mock(MyClass::class)->makePartial();
$myClass->shouldReceive('createCommentsListItem')->once();
// method_exists($myClass, 'createCommentsListItem')
// returns true now
}
(in this example: use Mockery as m;)
answered Nov 15 '18 at 19:29
TomTom
1,2051121
1,2051121
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f33856225%2fmockery-how-to-use-shouldreceive-with-method-exists%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
The ListItemFactory source would be great to see.
– l-x
Nov 30 '15 at 14:38
was just solving very similar stuff, check out stackoverflow.com/questions/37927273/… this might help you
– user3350906
Jun 20 '16 at 17:41
This is what helped me: stackoverflow.com/a/46922330/470749
– Ryan
Feb 23 at 19:13