Creating public methods in class and not in interface
I've come across an issue whether it is a good idea to create public methods/properties inside a class
public class MyClass : IMyClass
but not in the interface
public interface IMyClass
mainly for the purpose of unit testing implemented methods from IMyClass
inside MyClass
. I want to have access from my unit tests to implementation details inside class MyClass
to check if some fields meet the expectations. Additionaly, I don't want to expose these details through my interface.
On the other hand, I have a feeling that everything public inside MyClass
should be exposed in the interface IMyClass
, since this is the case of access modifiers:
public
to expose information, private
to hide details.
So, my the question is: Is it good to create public methods/properties inside a class MyClass
, but not in the interface IMyClass
?
unit-testing oop language-agnostic access-modifiers
add a comment |
I've come across an issue whether it is a good idea to create public methods/properties inside a class
public class MyClass : IMyClass
but not in the interface
public interface IMyClass
mainly for the purpose of unit testing implemented methods from IMyClass
inside MyClass
. I want to have access from my unit tests to implementation details inside class MyClass
to check if some fields meet the expectations. Additionaly, I don't want to expose these details through my interface.
On the other hand, I have a feeling that everything public inside MyClass
should be exposed in the interface IMyClass
, since this is the case of access modifiers:
public
to expose information, private
to hide details.
So, my the question is: Is it good to create public methods/properties inside a class MyClass
, but not in the interface IMyClass
?
unit-testing oop language-agnostic access-modifiers
add a comment |
I've come across an issue whether it is a good idea to create public methods/properties inside a class
public class MyClass : IMyClass
but not in the interface
public interface IMyClass
mainly for the purpose of unit testing implemented methods from IMyClass
inside MyClass
. I want to have access from my unit tests to implementation details inside class MyClass
to check if some fields meet the expectations. Additionaly, I don't want to expose these details through my interface.
On the other hand, I have a feeling that everything public inside MyClass
should be exposed in the interface IMyClass
, since this is the case of access modifiers:
public
to expose information, private
to hide details.
So, my the question is: Is it good to create public methods/properties inside a class MyClass
, but not in the interface IMyClass
?
unit-testing oop language-agnostic access-modifiers
I've come across an issue whether it is a good idea to create public methods/properties inside a class
public class MyClass : IMyClass
but not in the interface
public interface IMyClass
mainly for the purpose of unit testing implemented methods from IMyClass
inside MyClass
. I want to have access from my unit tests to implementation details inside class MyClass
to check if some fields meet the expectations. Additionaly, I don't want to expose these details through my interface.
On the other hand, I have a feeling that everything public inside MyClass
should be exposed in the interface IMyClass
, since this is the case of access modifiers:
public
to expose information, private
to hide details.
So, my the question is: Is it good to create public methods/properties inside a class MyClass
, but not in the interface IMyClass
?
unit-testing oop language-agnostic access-modifiers
unit-testing oop language-agnostic access-modifiers
asked Nov 12 at 11:13
Donios
375
375
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
A test is supposed to be a client of your code, using your code through its interface.
Writing a test that knows how your code works couples your test to your code, which makes a brittle test - every change to the code will break the test.
Instead, try to exercise your code using only the API. Since it sounds like your class has state in it, your test code will need to query that state in another API call.
If your API doesn't have a querying mechanism, perhaps the test is trying to tell you that such a feature is missing from your code.
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%2f53260961%2fcreating-public-methods-in-class-and-not-in-interface%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
A test is supposed to be a client of your code, using your code through its interface.
Writing a test that knows how your code works couples your test to your code, which makes a brittle test - every change to the code will break the test.
Instead, try to exercise your code using only the API. Since it sounds like your class has state in it, your test code will need to query that state in another API call.
If your API doesn't have a querying mechanism, perhaps the test is trying to tell you that such a feature is missing from your code.
add a comment |
A test is supposed to be a client of your code, using your code through its interface.
Writing a test that knows how your code works couples your test to your code, which makes a brittle test - every change to the code will break the test.
Instead, try to exercise your code using only the API. Since it sounds like your class has state in it, your test code will need to query that state in another API call.
If your API doesn't have a querying mechanism, perhaps the test is trying to tell you that such a feature is missing from your code.
add a comment |
A test is supposed to be a client of your code, using your code through its interface.
Writing a test that knows how your code works couples your test to your code, which makes a brittle test - every change to the code will break the test.
Instead, try to exercise your code using only the API. Since it sounds like your class has state in it, your test code will need to query that state in another API call.
If your API doesn't have a querying mechanism, perhaps the test is trying to tell you that such a feature is missing from your code.
A test is supposed to be a client of your code, using your code through its interface.
Writing a test that knows how your code works couples your test to your code, which makes a brittle test - every change to the code will break the test.
Instead, try to exercise your code using only the API. Since it sounds like your class has state in it, your test code will need to query that state in another API call.
If your API doesn't have a querying mechanism, perhaps the test is trying to tell you that such a feature is missing from your code.
answered Nov 12 at 12:44
Kraylog
4,54311323
4,54311323
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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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%2f53260961%2fcreating-public-methods-in-class-and-not-in-interface%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