Yes, you would create a new test target and add all the GUI stuff as a member 
of the test target. Of course, you will want to exclude them from other 
targets. You shouldn’t need to do any library linking since it is a common 
codebase. Simply include the classes and put the glue code in the App Delegate.

Keary Suska
Esoteritech, Inc.


> On Dec 13, 2019, at 7:35 AM, Robert Walsh via Cocoa-dev 
> <cocoa-dev@lists.apple.com> wrote:
> 
> Thanks - I just finished doing that.  I stubbed out a simple main that has 
> enough smarts to use this TcpClient the way it will be used in the real app, 
> and I was able to connect to an instance of the server to which the command 
> line tool needs to connect.  This server is running on another machine, not 
> on localhost.  I was able to make this connection without needing to grant 
> any entitlements to the command line tool, so the problem occurs only when 
> trying to run the unit test.  In short, the unit test case is allowed to 
> start a server and accept connections (from telnet, for example), and the 
> class being tested is allowed to connect to an external server when not being 
> run within the test case.  So far, though, the class being tested cannot 
> connect to the server when both are used inside the test case.
> 
> I can probably move forward by testing this particular class the old 
> fashioned way through manual inspection and then mocking it in other classes 
> where it will be used.
> 
> If, though, I want to go the dummy test app route, would I create another 
> target that is a GUI app, either link to a static library containing the 
> testable classes or include them as compile targets, and then create a unit 
> test bundle that targets that GUI app?
> 
> Rob
> 
> 
> ________________________________
> From: Keary Suska <cocoa-...@esoteritech.com>
> Sent: Friday, December 13, 2019 12:18 PM
> To: Robert Walsh <rwa...@envisionware.com>
> Cc: Cocoa-Dev (Apple) <cocoa-dev@lists.apple.com>
> Subject: Re: Permission Denied trying to connect to localhost in unit test
> 
> I would first test to see if you can access networking at all—i.e. connect to 
> a public HTTP server and see if it works. If it doesn’t, then you are 
> probably running against the entitlements issue. I suspect that the “dummy 
> target” indicated is simply a GUI app wrapper built just for testing but not 
> for deployment. Should be easy enough because it doesn’t have to do anything 
> in the GUI.
> 
> Keary Suska
> Esoteritech, Inc.
> 
> 
>> On Dec 13, 2019, at 4:42 AM, Robert Walsh via Cocoa-dev 
>> <cocoa-dev@lists.apple.com> wrote:
>> 
>> The errno is 13 (which I think is just a generic Permission Denied).
>> 
>> I am connecting to localhost.
>> 
>> I did find this post in the Apple Developer Forums 
>> (https://forums.developer.apple.com/thread/52211):
>> How do I unittest a command line application? |Apple Developer 
>> Forums<https://forums.developer.apple.com/thread/52211>
>> Yes, you can add the unit testing bundle, but it won't let you set Target to 
>> be Tested.. Right. That’s because the machinery to load your test bundle 
>> within a process only works if the process is based on a GUI framework (like 
>> Cocoa or Cocoa Touch).
>> forums.developer.apple.com
>> 
>> 
>> A command line tool typically does not use a GUI framework and thus the test 
>> machinery is unable to load your bundle into that tool.
>> 
>> However, you can test without an app target.  If you set the Target to be 
>> Tested popup to None, Xcode will load your test bundle into its built-in 
>> ‘test runner’ tool, xctest.
>> 
>> This works well for most but there are some gotchas.  Specifically, if the 
>> code you’re using requires entitlements then you won’t be able to test it 
>> like this because there’s no way to give those entitlements to xctest.  The 
>> standard workaround for that is to add a dummy test target app to your 
>> project.
>> 
>> 
>> Assuming the problem is that I need to add the App Sandbox -> Outgoing 
>> Connections (Client) entitlement to the command line target (since I can't 
>> add any entitlements to the test target; clicking "+ Capabilities" brings up 
>> a dialog saying that capabilities are not support for this target), how do I 
>> create "a dummy test target app?"  As I said before, I created the test 
>> target by using the Unit Test Bundle template, and I don't see any other 
>> relevant choices.
>> 
>> 
>> Rob
>> 
>> 
>> ________________________________
>> From: Jens Alfke <j...@mooseyard.com>
>> Sent: Thursday, December 12, 2019 1:58 PM
>> To: Robert Walsh <rwa...@envisionware.com>
>> Cc: Cocoa-Dev (Apple) <cocoa-dev@lists.apple.com>
>> Subject: Re: Permission Denied trying to connect to localhost in unit test
>> 
>> 
>> 
>> On Dec 12, 2019, at 7:42 AM, Robert Walsh via Cocoa-dev 
>> <cocoa-dev@lists.apple.com<mailto:cocoa-dev@lists.apple.com>> wrote:
>> 
>> I am writing a command line application in Objective-C that needs to make a 
>> TCP connection to a server.  In a unit test for the TcpClient class I am 
>> writing, I have a simple TCP server that listens for connections in a 
>> thread.  When I try to connect to this socket from the client socket class, 
>> connect() fails and perror reports Permission Denied.
>> 
>> That's odd. I've written plenty of macOS networking code and not seen this 
>> problem. What is the errno value?
>> 
>> The only thing I can guess is that the Xcode test-runner process is being 
>> sandboxed to prevent outgoing networking, but I've definitely run TCP 
>> connections from XCTests without problems. Are you connecting to "localhost" 
>> / 127.0.0.1, or using an explicit IP address?
>> 
>> —Jens
>> _______________________________________________
>> 
>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
>> 
>> Please do not post admin requests or moderator comments to the list.
>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>> 
>> Help/Unsubscribe/Update your Subscription:
>> https://lists.apple.com/mailman/options/cocoa-dev/cocoa-dev%40esoteritech.com
>> 
>> This email sent to cocoa-...@esoteritech.com
> 
> _______________________________________________
> 
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
> 
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
> 
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/cocoa-dev/cocoa-dev%40esoteritech.com
> 
> This email sent to cocoa-...@esoteritech.com

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to