For the most part, yes - you simply have to try things and search for specific work arounds.
As a developer you need a device that supports ADB connectivity, and you need variety.
You may be well served by downloading genymotion, becoming familiar with AVD and learning to experiment with shell commands, possibly script development.
You probably must root the device for development. If, for a short time, you don't have access to a shell through ADB, you can grab a terminal emulator for Android to jumpstart your process - you basically have a shell on the device with that, and can proceed to arrange things as you require.
For example (and this is slightly advanced usage):
If the device has a little room, you can emulate an SD card on a device that doesn't have one.
If I assume you have a shell on a rooted device (two requirements here), you can look into these commands...
dd if=/dev/zero of=output_file bs=32768 count=100
This command can be used to start the process of creating a virtual disk. This dd example creates a file of zeros 3276800 bytes long. Adjust count to your requirements.
Note that "output_file" should be a full path to a place on your device that can store a file for your use - each device is different, but you might look in /mnt, /storage, /sdcard0, /sdcard....wherever your device mounts "/data/media" - representing the internal SD card nearly every device has.
mknod /dev/block/fake_sd b 7 101
For this to work you may have to first
mount -o remount,rw /
The mount command simply allows you to write to the root directory and it's direct children - without it the mknod command might refuse because it's read only.
mknod makes a node - a special type of file representing a block device (the b parameter here), with id numbers 7 and 101. Google to learn more.
losetup /dev/block/fake_sd output_file
This command attaches the node to the file created by dd - note that output_file should be replaced with a full path to the file created by dd.
At this point /dev/block/fake_sd looks like an SD card without a filesystem, to Android anyway.
So, format it with
mkfs.vfat /dev/block/fake_sd
This writes to output_file, since it's connected to /dev/block/fake_sd as a block device, creating a FAT32 filesystem, just like a real external SD card (a small one).
Now, mount it....
Every device has it's own mounting point which differs. On some it's /storage, others it's /mnt (genymotion, for example, uses mnt).
Again, you may require
mount -o remount,rw /
Or something to that effect in order to create a directory inside there, such that:
mkdir /mnt/sdcard1
creates an empty directory in /mnt called sdcard1.
Then, finally,
mount -o rw -t vfat /dev/block/fake_sd /mnt/sdcard1
At that moment, /mnt/sdcard1 LOOKS like a vfat filesystem mounted as an external_SD card.
Assuming your implementation of Android wants it's SD card mounted on /mnt/sdcard1.
Some might want, instead, something like:
/storage/external_SD
Whatever it prefers.
On most, if the device has no card installed, the directory is already there, just not mounted (and empty). You can simply use it because it's on an ext4 or ext2 filesystem (a Linux filesystem), and the OS knows it's just waiting for a mount.